File: D:/HostingSpaces/TDijk1/erp-apps.eu/wwwroot/CMSWebParts/Pux/Documents/PuxRepeater.ascx.cs
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections;
using CMS.Helpers;
using CMS.DocumentEngine;
using CMS.Controls;
using System.Collections.Generic;
using CMS.MacroEngine;
using CMS.PortalControls;
public partial class CMSWebParts_Pux_Documents_PuxRepeater : CMSAbstractWebPart, INamingContainer
{
public string NestedControlsID
{
get
{
return GetStringValue("NestedControlsID", string.Empty);
}
set
{
SetValue("NestedControlsID", value);
}
}
public string WhereCondition
{
get
{
return GetStringValue("WhereCondition", string.Empty);
}
set
{
SetValue("WhereCondition", value);
}
}
public string OrderBy
{
get
{
return GetStringValue("OrderBy", string.Empty);
}
set
{
SetValue("OrderBy", value);
}
}
public string PageType
{
get
{
return ClassNames;
}
set
{
ClassNames = value;
}
}
public string ClassNames
{
get
{
return GetStringValue("ClassNames", string.Empty);
}
set
{
SetValue("ClassNames", value);
}
}
public string TransformationName
{
get
{
return GetStringValue("TransformationName", string.Empty);
}
set
{
SetValue("TransformationName", value);
}
}
public string Path
{
get
{
return GetStringValue("Path", string.Empty);
}
set
{
SetValue("Path", value);
}
}
public string Columns
{
get
{
return GetStringValue("Columns", string.Empty);
}
set
{
SetValue("Columns", value);
}
}
public int TopN
{
get
{
return ValidationHelper.GetInteger(GetValue("TopN"), -1);
}
set
{
SetValue("TopN", value);
}
}
public bool SelectOnlyPublished
{
get
{
return ValidationHelper.GetBoolean(GetValue("SelectOnlyPublished"), false);
}
set
{
SetValue("SelectOnlyPublished", value);
}
}
public int NestingLevel
{
get
{
return ValidationHelper.GetInteger(GetValue("NestingLevel"), -1);
}
set
{
SetValue("NestingLevel", value);
}
}
public bool HideControlForZeroRows
{
get
{
return ValidationHelper.GetBoolean(GetValue("HideControlForZeroRows"), false);
}
set
{
SetValue("HideControlForZeroRows", value);
}
}
private ITemplate _ItemTemplate;
private ITemplate _AlternateItemTemplate;
private ITemplate _HeaderTemplate;
private ITemplate _FooterTemplate;
private ITemplate _EmptyTemplate;
private IEnumerable _DataSource;
protected void Page_Load(object sender, EventArgs e)
{
}
[TemplateContainer(typeof(SimpleTemplateItem))]
public ITemplate ItemTemplate
{
get
{
if (_ItemTemplate == null)
{
if (!string.IsNullOrEmpty(TransformationName))
{
_ItemTemplate = CMSDataProperties.LoadTransformation(this, TransformationName);
}
}
return _ItemTemplate;
}
set { _ItemTemplate = value; }
}
[TemplateContainer(typeof(SimpleTemplateItem))]
public ITemplate AlternateItemTemplate
{
get { return _AlternateItemTemplate; }
set { _AlternateItemTemplate = value; }
}
[TemplateContainer(typeof(SimpleTemplateItem))]
public ITemplate HeaderTemplate
{
get { return _HeaderTemplate; }
set { _HeaderTemplate = value; }
}
[TemplateContainer(typeof(SimpleTemplateItem))]
public ITemplate FooterTemplate
{
get { return _FooterTemplate; }
set { _FooterTemplate = value; }
}
[TemplateContainer(typeof(SimpleTemplateItem))]
public ITemplate EmptyTemplate
{
get { return _EmptyTemplate; }
set { _EmptyTemplate = value; }
}
public IEnumerable DataSource
{
get
{
if (_DataSource == null)
{
_DataSource = DocumentHelper.GetDocuments(PageType)
.TopN(TopN)
.Path(MacroResolver.GetInstance().ResolvePath(Path).Replace("%", ""), PathTypeEnum.Children)
.NestingLevel(NestingLevel)
.OrderBy(OrderBy)
.Columns(Columns)
.Published(SelectOnlyPublished)
.Where(WhereCondition).Tables[0].DefaultView;
}
return _DataSource;
}
set
{
_DataSource = value;
}
}
private object _CurrentItem;
public object CurrentItem
{
get { return _CurrentItem; }
set { _CurrentItem = value; }
}
public override void DataBind()
{
base.DataBind(); //First binding to get values of <%#%> properties
//to jestli se vykreslí, nebo nevykreslí hlavička se zjišťuje takto složitě, protože na obyčejné IEnumerable nelze zjistit, jestli je prázdná
if (!(HideControlForZeroRows))
{
AddTemplateAsControl(HeaderTemplate, null, -1);
}
IEnumerator ie = DataSource.GetEnumerator();
bool renderAlternateTemplate = false;
int index = -1;
while (ie.MoveNext())
{
index++;
if (index == 0 && HideControlForZeroRows)
{
AddTemplateAsControl(HeaderTemplate, null, -1);
}
if (AlternateItemTemplate != null)
{
if (renderAlternateTemplate)
{
AddTemplateAsControl(AlternateItemTemplate, ie.Current, index);
}
else
{
AddTemplateAsControl(ItemTemplate, ie.Current, index);
}
}
else
{
AddTemplateAsControl(ItemTemplate, ie.Current, index);
}
renderAlternateTemplate = !renderAlternateTemplate;
}
//Rendering footer template into current control
if (!(HideControlForZeroRows && index == -1))
{
AddTemplateAsControl(FooterTemplate, null, -1);
}
//Rendering EmptyTemplate for zero rows
if (EmptyTemplate != null && index == -1)
{
AddTemplateAsControl(EmptyTemplate, null, -1);
}
DataBindChildren();
}
private void AddTemplateAsControl(ITemplate anyTemplate, object currentItem, int currentItemIndex)
{
if (anyTemplate != null)
{
SimpleTemplateItem templateContentHolder = new SimpleTemplateItem(currentItem, currentItemIndex);
anyTemplate.InstantiateIn(templateContentHolder);
this.Controls.Add(templateContentHolder);
}
}
}
public class SimpleTemplateItem : Control, System.Web.UI.INamingContainer, IDataItemContainer
{
private object _CurrentDataItem;
private int _DataItemIndex;
public SimpleTemplateItem(object currentItem, int curentIndex)
{
_CurrentDataItem = currentItem;
_DataItemIndex = curentIndex;
}
#region IDataItemContainer Members
public object DataItem
{
get { return _CurrentDataItem; }
}
public int DataItemIndex
{
get { return _DataItemIndex; }
}
public int DisplayIndex
{
get { return DataItemIndex; }
}
#endregion
}