Asp.Net Repeaterの2層ネストと遍歴取値の簡単な実装(checkbox)

11325 ワード

1つ目のネスト方法:
<select id="s6" multiple="multiple">
                <asp:Repeater ID="rpl_dept" runat="server" 
                    onitemdatabound="rpl_dept_ItemDataBound">
                <ItemTemplate>
                <optgroup label="Name") %>">
                    <asp:Repeater ID="rpl_user" runat="server">
                    <ItemTemplate>
                    <option>Eval("Name")%>option>
                    ItemTemplate>
                    asp:Repeater>
                    optgroup>
                ItemTemplate>
                asp:Repeater>
            select>       
 protected void rpl_bind()
        {
            com.hmby.BLL.Depts dept = new com.hmby.BLL.Depts();
            string strWhere = "";
            DataTable dt = new DataTable();
            dt = dept.GetList(strWhere).Tables[0];
            if (dt.Rows.Count > 0)
            {
                this.rpl_dept.DataSource = dt;
                this.rpl_dept.DataBind();
            }
         }

         protected void rpl_dept_ItemDataBound(object sender, RepeaterItemEventArgs e)
         {
             if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
             {
                 Repeater rep = e.Item.FindControl("rpl_user") as Repeater;//     repeater  
                 DataRowView rowv = (DataRowView)e.Item.DataItem;//    Repeater       
                 int deptId = Convert.ToInt32(rowv["Id"]); //       id 
                 DataTable dt = new DataTable();
                 com.hmby.BLL.Users user = new com.hmby.BLL.Users();
                 string strWhere = " DeptId=" + deptId;
                 dt = user.GetList(strWhere).Tables[0]; ;
                 if (dt.Rows.Count > 0)
                 {
                     rep.DataSource = dt;
                     rep.DataBind();
                 }

             }

         }

2つ目のネスト方法:checkbox
<asp:Repeater ID="rpl_mParent" runat="server" 
                        onitemdatabound="rpl_mParent_ItemDataBound">
    <ItemTemplate>
        <tr>
            <td style="vertical-align:top;background-color:#ffa !important;">
            <input type="checkbox" id="cbox_p" value='' runat="server"/>
      <label class="choice" for="cb1">Eval("ModelName")%>label>
            td>
        tr>
        <asp:Repeater ID="rpl_mChild" runat="server">
        <ItemTemplate>
        <tr><td>    
        <input type="checkbox" id="cbox_c" value='' runat="server"/>
     <label class="choice" for="cb1">Eval("ModelName")%>label>
        td>tr>
        ItemTemplate>
        asp:Repeater>
    ItemTemplate>
    asp:Repeater>

ネストされたCheckbox、二層遍歴:
for (int i=0;i<this.rpl_mParent.Items.Count;i++)
            {
                HtmlInputCheckBox cbox_p = (HtmlInputCheckBox)rpl_mParent.Items[i].FindControl("cbox_p");
                if (cbox_p.Checked)
                { 
                    //   checkbox_p
                    JsUtil.Alert(this, "p");
                }
                Repeater rplChild = (Repeater)rpl_mParent.Items[i].FindControl("rpl_mChild");
                string c = "";
                for (int j=0;j"cbox_c");
                    if (cbox_c.Checked)
                    { 
                        //   checkbox_c
                        c += cbox_c.Value + ",";
                    }
                }
                JsUtil.Alert(this, c);
            }