<%@ Page Language="C#" AutoEventWireup="True" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html >
<head>
<title>Repeater Example</title>
<script language="C#" runat="server">
int Count = 1;
void Page_Load(Object Sender, EventArgs e) {
if (!IsPostBack) {
ArrayList values = new ArrayList();
values.Add(new PositionData("Microsoft", "Msft"));
values.Add(new PositionData("Intel", "Intc"));
values.Add(new PositionData("Dell", "Dell"));
Repeater1.DataSource = values;
Repeater1.DataBind();
}
}
void R1_ItemCreated(Object Sender, RepeaterItemEventArgs e) {
String iTypeText = "";
switch (e.Item.ItemType) {
case ListItemType.Item:
iTypeText = "Item";
break;
case ListItemType.AlternatingItem:
iTypeText = "AlternatingItem";
break;
case ListItemType.Header:
iTypeText = "Header";
break;
case ListItemType.Footer:
iTypeText = "Footer";
break;
case ListItemType.Separator:
iTypeText = "Separator";
break;
}
Label1.Text += "(" + Count++ + ") A Repeater " + iTypeText + " has been created; <br />";
}
public class PositionData {
private string name;
private string ticker;
public PositionData(string name, string ticker) {
this.name = name;
this.ticker = ticker;
}
public string Name {
get {
return name;
}
}
public string Ticker {
get {
return ticker;
}
}
}
</script>
</head>
<body>
<h3>Repeater Example</h3>
<form id="form1" runat="server">
<b>Repeater1:</b>
<br />
<asp:Repeater id="Repeater1" OnItemCreated="R1_ItemCreated" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<td><b>Company</b></td>
<td><b>Symbol</b></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td> <%# DataBinder.Eval(Container.DataItem, "Name") %> </td>
<td> <%# DataBinder.Eval(Container.DataItem, "Ticker") %> </td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
<br />
<asp:Label id="Label1" font-names="Verdana" ForeColor="Red" font-size="10pt" runat="server"/>
</form>
</body>
</html>
例子是在MSDN上面的,看图可以表明,R1_ItemCreated()函数被触发的时候,就是:(1)头部模板:<HeaderTemplate>中的内容
<table border="1">
<tr>
<td><b>Company</b></td>
<td><b>Symbol</b></td>
</tr>
被生成的时候,同理,也是(2)中部模板</ItemTemplate>中的内容
<tr>
<td> <%# DataBinder.Eval(Container.DataItem, "Name") %> </td>
<td> <%# DataBinder.Eval(Container.DataItem, "Ticker") %> </td>
</tr>
被生成的时候,这里如果datasourse中有三列,就会触发三次,在这里就是每一行<tr><td></td><td></td></tr>被生成的时候
只要付给了repeater 的datasourse和调用了repeater的 DataBind();方法,R1_ItemCreated()就会触发,就算repeater中没有这整段itemTemplate:
<ItemTemplate>
<tr>
<td> <%# DataBinder.Eval(Container.DataItem, "Name") %> </td>
<td> <%# DataBinder.Eval(Container.DataItem, "Ticker") %> </td>
</tr>
</ItemTemplate>
它也是会有五次的触发事件,如图:
这个时侯可以得出结论:只要repeater中有数据源datasourse以及调用了repeater的 DataBind();,R1_ItemCreated()就会触发,而且是即使没有:<ItemTemplate>
</ItemTemplate>这一项,她在触发的时候也可以用if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)这个条件去判断他是不是在添加</ItemTemplate>的内容,这个时候就好办了,在R1_ItemCreated()中添加以下的判断:if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//定义HyperLink服务器控件及相关属性
System.Web.UI.WebControls.HyperLink linkctr = new HyperLink();
linkctr.Text = "asd";
linkctr.NavigateUrl = "http://www.163.com ";
//直接加入到repeater项中。
e.Item.Controls.Add(linkctr);
LiteralControl lc = new LiteralControl(" <br> ");
e.Item.Controls.Add(lc);
}
便可以动态的为这个repeater添加列数以及列中的内容,同理,也可以只定义一个repeater的模板
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
然后在data_createed的时候动态的中间各个头部了