📄 repeater.cs
字号:
using System;
using System.Web.UI;
using System.Collections;
using System.ComponentModel;
namespace System.Web.UI.WebControls
{
/// <summary>
/// Summary description for Repeater.
/// </summary>
//.custom instance void System.Web.UI.PersistChildrenAttribute
// .custom instance void [System]System.ComponentModel.DefaultEventAttribute
// .custom instance void [System]System.ComponentModel.DefaultPropertyAttribute
// .custom instance void [System]System.ComponentModel.DesignerAttribute
// .custom instance void System.Web.UI.ParseChildrenAttribute
public class Repeater : Control,INamingContainer
{
static internal string ItemCountViewStateKey = "_!ItemCount";
private static object EventItemCreated;
private static object EventItemDataBound;
private static object EventItemCommand;
private object dataSource;
private System.Web.UI.ITemplate headerTemplate;
private System.Web.UI.ITemplate footerTemplate;
private System.Web.UI.ITemplate itemTemplate;
private System.Web.UI.ITemplate alternatingItemTemplate;
private System.Web.UI.ITemplate separatorTemplate;
private System.Collections.ArrayList itemsArray;
private System.Web.UI.WebControls.RepeaterItemCollection itemsCollection;
static Repeater()
{
Repeater.EventItemCreated = new Object();
Repeater.EventItemDataBound = new Object();
Repeater.EventItemCommand = new Object();
}
public Repeater() : base()
{
}
protected virtual void CreateChildControls()
{
this.Controls.Clear();
if (this.ViewState["_!ItemCount"] != null)
this.CreateControlHierarchy(false);
else
this.itemsArray = new ArrayList();
this.ClearChildViewState();
}
protected virtual void CreateControlHierarchy(bool useDataSource)
{
IEnumerable local0;
int local1;
ICollection local2;
RepeaterItem local3;
ListItemType local4;
int local5;
bool local6;
object local7;
IEnumerator local8;
IDisposable local9;
local0 = null;
local1 = -1;
if (this.itemsArray != null)
this.itemsArray.Clear();
else
this.itemsArray = new ArrayList();
if (!(useDataSource))
{
local1 = (Int32) this.ViewState["_!ItemCount"];
if (local1 == -1)
goto i0;
local0 = new DummyDataSource(local1);
this.itemsArray.Capacity = local1;
}
else
{
local0 = System.Web.UI.DataSourceHelper.GetResolvedDataSource(this.DataSource, this.DataMember);
local2 = local0 as ICollection;
if (local2 != null)
this.itemsArray.Capacity = local2.Count;
}
i0: if (local0 != null)
{
// this.Controls;
local5 = 0;
local6 = this.separatorTemplate != null;
local1 = 0;
if (this.headerTemplate != null)
this.CreateItem(-1, 0, useDataSource, null);
local8 = local0.GetEnumerator();
try
{
while (local8.MoveNext())
{
local7 = local8.Current;
if (local6 && local1 > 0)
this.CreateItem(local5 - 1, ListItemType.Separator, useDataSource, null);
if (local5 % 2 != 0)
{
// goto i-1;
}
local4 = ListItemType.Item;
local3 = this.CreateItem(local5, local4, useDataSource, local7);
this.itemsArray.Add(local3);
local1++;
local5++;
}
}
finally
{
local9 = local8 as IDisposable;
if (local9 == null)
{
// goto i-1;
}
local9.Dispose();
}
if (this.footerTemplate != null)
this.CreateItem(-1, ListItemType.Footer, useDataSource, null);
}
if (useDataSource)
{
if (local0 == null)
{
// goto i-1;
}
// "_!ItemCount"[-1]= local1;
}
}
private RepeaterItem CreateItem(int itemIndex, ListItemType itemType, bool dataBind, object dataItem)
{
RepeaterItem local0;
RepeaterItemEventArgs local1;
local0 = this.CreateItem(itemIndex, itemType);
local1 = new RepeaterItemEventArgs(local0);
this.InitializeItem(local0);
if (dataBind)
local0.DataItem = dataItem;
this.OnItemCreated(local1);
this.Controls.Add(local0);
if (dataBind)
{
local0.DataBind();
this.OnItemDataBound(local1);
local0.DataItem = null;
}
return local0;
}
protected virtual RepeaterItem CreateItem(int itemIndex, ListItemType itemType)
{
return new RepeaterItem(itemIndex, itemType);
}
public virtual void DataBind()
{
this.OnDataBinding(System.EventArgs.Empty);
}
protected virtual void InitializeItem(RepeaterItem item)
{
ITemplate local0;
ListItemType local1;
local0 = null;
local1 = item.ItemType;
switch (local1)
{
case 0:
local0 = this.headerTemplate;
break;
break;
case ListItemType.Footer:
local0 = this.footerTemplate;
break;
break;
case ListItemType.Item:
i1: local0 = this.itemTemplate;
break;
break;
case ListItemType.AlternatingItem:
local0 = this.alternatingItemTemplate;
if (local0 != null)
break;
goto i1;
break;
case ListItemType.Separator:
local0 = this.separatorTemplate;
break;
}
if (local0 != null)
local0.InstantiateIn(item);
}
protected virtual bool OnBubbleEvent(object sender, EventArgs e)
{
bool local0;
local0 = false;
if (e as RepeaterCommandEventArgs != null)
{
this.OnItemCommand((RepeaterCommandEventArgs) e);
local0 = true;
}
return local0;
}
protected virtual void OnDataBinding(EventArgs e)
{
this.OnDataBinding(e);
this.Controls.Clear();
this.ClearChildViewState();
this.CreateControlHierarchy(true);
this.ChildControlsCreated = true;
}
protected virtual void OnItemCommand(RepeaterCommandEventArgs e)
{
RepeaterCommandEventHandler local0;
local0 = (RepeaterCommandEventHandler) this.Events[Repeater.EventItemCommand];
if (local0 != null)
{
// local0.Invoke(this, e);
}
}
protected virtual void OnItemCreated(RepeaterItemEventArgs e)
{
RepeaterItemEventHandler local0;
local0 = (RepeaterItemEventHandler) this.Events[Repeater.EventItemCreated];
if (local0 != null)
{
// local0.Invoke(this, e);
}
}
protected virtual void OnItemDataBound(RepeaterItemEventArgs e)
{
RepeaterItemEventHandler local0;
local0 = (RepeaterItemEventHandler) this.Events[Repeater.EventItemDataBound];
if (local0 != null)
{
// local0.Invoke(this, e);
}
}
public event RepeaterCommandEventHandler ItemCommand
{
add
{
this.Events.AddHandler(Repeater.EventItemCommand, value);
}
remove
{
this.Events.RemoveHandler(Repeater.EventItemCommand, value);
}
}
public event RepeaterItemEventHandler ItemCreated
{
add
{
this.Events.AddHandler(Repeater.EventItemCreated, value);
}
remove
{
this.Events.RemoveHandler(Repeater.EventItemCreated, value);
}
}
public event RepeaterItemEventHandler ItemDataBound
{
add
{
this.Events.AddHandler(Repeater.EventItemDataBound, value);
}
remove
{
this.Events.RemoveHandler(Repeater.EventItemDataBound, value);
}
}
public virtual ITemplate AlternatingItemTemplate
{
get
{
return this.alternatingItemTemplate;
}
set
{
this.alternatingItemTemplate = value;
}
}
public virtual ControlCollection Controls
{
get
{
this.EnsureChildControls();
return this.Controls;
}
}
public virtual string DataMember
{
get
{
object local0;
local0 = this.ViewState["DataMember"];
if (local0 != null)
return (String) local0;
return System.String.Empty;
}
set
{
this.ViewState["DataMember"]= value;
}
}
public virtual object DataSource
{
get
{
return this.dataSource;
}
set
{
if (value != null && value as IListSource == null)
if (value as IEnumerable == null)
goto i2;
this.dataSource = value;
return;
i2: throw new ArgumentException(System.Web.HttpRuntime.FormatResourceString("Invalid_DataSource_Type", this.ID));
}
}
public virtual ITemplate FooterTemplate
{
get
{
return this.footerTemplate;
}
set
{
this.footerTemplate = value;
}
}
public virtual ITemplate HeaderTemplate
{
get
{
return this.headerTemplate;
}
set
{
this.headerTemplate = value;
}
}
public virtual RepeaterItemCollection Items
{
get
{
if (this.itemsCollection == null)
{
if (this.itemsArray == null)
this.EnsureChildControls();
this.itemsCollection = new RepeaterItemCollection(this.itemsArray);
}
return this.itemsCollection;
}
}
public virtual ITemplate ItemTemplate
{
get
{
return this.itemTemplate;
}
set
{
this.itemTemplate = value;
}
}
public virtual ITemplate SeparatorTemplate
{
get
{
return this.separatorTemplate;
}
set
{
this.separatorTemplate = value;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -