我现在有两个 Repeater 嵌套,每一个Repeater都放着一个 CheckBox ,我父 Repeater 中CheckBox
<input type="checkbox" name="cb_<%# Container.ItemIndex + 1 %>" /> 会形如 name="cb_1" 或 name="cb_2"
我想在其子 Repeater 中 CheckBox 所对应的 name 为  name="cb_1_1" , name="cb_1_2" ,name="cb_1_2"
或 name="cb_2_1" ,name="cb_2_2" ,name="cb_2_3"请大侠指教一下.如果不用索引只要能实现类似的效果就行

解决方案 »

  1.   

    类似这样for (int i = 0; i < this.Repeater1.Items.Count; i++)
            {
                Repeater Repeater2 = (Repeater)Repeater1.Items[i].FindControl("Repeater2");
                for (int j = 0; i < this.Repeater2.Items.Count; j++)
                {
                    CheckBox CheckBox1 = (CheckBox)Repeater1.Items[j].FindControl("checkbox1");
                }
            }
      

  2.   

    你也可以使用全局变量实现protected Int32 parentId = 0;<%@ Page Language="C#" EnableViewState="false" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">  protected Int32 parentId = 0;
      protected void Page_Load(object sender, EventArgs e)
      {
        System.Data.DataSet ds = new System.Data.DataSet();
        System.Data.DataTable dataTable1 = new System.Data.DataTable("BlogUser");
        System.Data.DataRow dr;
        dataTable1.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));
        dataTable1.Columns.Add(new System.Data.DataColumn("UserName", typeof(System.String)));
        dataTable1.PrimaryKey = new System.Data.DataColumn[] { dataTable1.Columns["UserId"] };
        for (int i = 0; i < 8; i++)
        {
          dr = dataTable1.NewRow();
          dr[0] = i;
          dr[1] = "【孟子E章】" + i.ToString();
          dataTable1.Rows.Add(dr);
        }
        System.Data.DataTable dataTable2 = new System.Data.DataTable("BlogArticle");
        dataTable2.Columns.Add(new System.Data.DataColumn("ArticleId", typeof(System.Int32)));
        dataTable2.Columns.Add(new System.Data.DataColumn("Title", typeof(System.String)));
        dataTable2.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));
        dataTable2.PrimaryKey = new System.Data.DataColumn[] { dataTable1.Columns["ArticleId"] };
        Random rd = new Random();
        for (int i = 0; i < 20; i++)
        {
          dr = dataTable2.NewRow();
          dr[0] = i;
          dr[1] = "文章标题" + i.ToString();
          dr[2] = rd.Next(0, 7);
          dataTable2.Rows.Add(dr);
        }
        ds.Tables.Add(dataTable1);
        ds.Tables.Add(dataTable2);
        System.Data.DataColumn parentColumn = ds.Tables["BlogUser"].Columns["UserId"];
        System.Data.DataColumn childColumn = ds.Tables["BlogArticle"].Columns["UserId"];
        System.Data.DataRelation user_article = new System.Data.DataRelation("UserId", parentColumn, childColumn);
        ds.Relations.Add(user_article);
        this.parentRepeater.DataSource = ds.Tables["BlogUser"].DefaultView;
        this.parentRepeater.DataBind();
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    </head>
    <body>
      <form id="form1" runat="server">
      <!-- 父Repeater开始 -->
      <asp:Repeater ID="parentRepeater" runat="server">
        <ItemTemplate>
          <b><%# parentId = Container.ItemIndex + 1%>
            <input type="checkbox" name="cb_<%=parentId %>" />
            <%# DataBinder.Eval(Container.DataItem, "UserName")%>
          </b>
          <ul>
            <!-- 子Repeater开始 -->
            <asp:Repeater ID="childRepeater" runat="server" DataSource='<%# ((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("UserId") %>'>
              <ItemTemplate>
                <li>
                <input type="checkbox" name="cb_<%=parentId %>_<%# Container.ItemIndex + 1 %>" />
                  <%# DataBinder.Eval(Container.DataItem, "[\"Title\"]")%></li>
              </ItemTemplate>
            </asp:Repeater>
          </ul>
          <!-- 子Repeater结束 -->
        </ItemTemplate>
      </asp:Repeater>
      <!-- 父Repeater结束 -->
      </form>
    </body>
    </html>
      

  3.   

    绑定事件的实现方法
    <%@ Page Language="C#" EnableViewState="false" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">  protected Int32 parentId = 0;
      protected void Page_Load(object sender, EventArgs e)
      {
        System.Data.DataSet ds = new System.Data.DataSet();
        System.Data.DataTable dataTable1 = new System.Data.DataTable("BlogUser");
        System.Data.DataRow dr;
        dataTable1.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));
        dataTable1.Columns.Add(new System.Data.DataColumn("UserName", typeof(System.String)));
        dataTable1.PrimaryKey = new System.Data.DataColumn[] { dataTable1.Columns["UserId"] };
        for (int i = 0; i < 8; i++)
        {
          dr = dataTable1.NewRow();
          dr[0] = i;
          dr[1] = "【孟子E章】" + i.ToString();
          dataTable1.Rows.Add(dr);
        }
        System.Data.DataTable dataTable2 = new System.Data.DataTable("BlogArticle");
        dataTable2.Columns.Add(new System.Data.DataColumn("ArticleId", typeof(System.Int32)));
        dataTable2.Columns.Add(new System.Data.DataColumn("Title", typeof(System.String)));
        dataTable2.Columns.Add(new System.Data.DataColumn("UserId", typeof(System.Int32)));
        dataTable2.PrimaryKey = new System.Data.DataColumn[] { dataTable1.Columns["ArticleId"] };
        Random rd = new Random();
        for (int i = 0; i < 20; i++)
        {
          dr = dataTable2.NewRow();
          dr[0] = i;
          dr[1] = "文章标题" + i.ToString();
          dr[2] = rd.Next(0, 7);
          dataTable2.Rows.Add(dr);
        }
        ds.Tables.Add(dataTable1);
        ds.Tables.Add(dataTable2);
        System.Data.DataColumn parentColumn = ds.Tables["BlogUser"].Columns["UserId"];
        System.Data.DataColumn childColumn = ds.Tables["BlogArticle"].Columns["UserId"];
        System.Data.DataRelation user_article = new System.Data.DataRelation("UserId", parentColumn, childColumn);
        ds.Relations.Add(user_article);
        this.parentRepeater.DataSource = ds.Tables["BlogUser"].DefaultView;
        this.parentRepeater.DataBind();
      }  protected void parentRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
      {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
          parentId = e.Item.ItemIndex + 1;
        }
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    </head>
    <body>
      <form id="form1" runat="server">
      <!-- 父Repeater开始 -->
      <asp:Repeater ID="parentRepeater" runat="server" 
        onitemdatabound="parentRepeater_ItemDataBound">
        <ItemTemplate>
          <b>
            <input type="checkbox" name="cb_<%=parentId %>" />
            <%# DataBinder.Eval(Container.DataItem, "UserName")%>
          </b>
          <ul>
            <!-- 子Repeater开始 -->
            <asp:Repeater ID="childRepeater" runat="server" DataSource='<%# ((System.Data.DataRowView)Container.DataItem).Row.GetChildRows("UserId") %>'>
              <ItemTemplate>
                <li>
                <input type="checkbox" name="cb_<%=parentId %>_<%# Container.ItemIndex + 1 %>" />
                  <%# DataBinder.Eval(Container.DataItem, "[\"Title\"]")%></li>
              </ItemTemplate>
            </asp:Repeater>
          </ul>
          <!-- 子Repeater结束 -->
        </ItemTemplate>
      </asp:Repeater>
      <!-- 父Repeater结束 -->
      </form>
    </body>
    </html>
      

  4.   

    简单的方法可以这样
    <input type="checkbox" name="cb_<%# ((RepeaterItem)Container.Parent.Parent).ItemIndex+1 %>_<%# Container.ItemIndex + 1 %>" />
      

  5.   

    个人感觉嵌套的话,手工拼HTML会好处理点。