现在的位置: 首页 > 综合 > 正文

Repeater 的ItemCreated事件触发的时侯,即为一个模板被创建的时候

2013年01月13日 ⁄ 综合 ⁄ 共 4341字 ⁄ 字号 评论关闭

 

<%@ 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的时候动态的中间各个头部了

抱歉!评论已关闭.