Repeater 内嵌 CheckBoxList 显示年级及其下班级列表

页面HTML部分

-------------

<tr>

 <td>年级班级列表:</td>

 <td>

 <asp:Repeater ID="repeater_GradeClass" runat="server" >

   <ItemTemplate>

      <table>

         <tr>

            <td>

              <asp:Label ID="lbl_Grade" runat="server" style="color:Red;"

                   Text='<%# Eval("GradeName") %>'></asp:Label>

            </td>

         </tr>

         <tr>

            <td>

              <asp:CheckBoxList ID="chklist_Classes" runat="server" RepeatDirection="horizontal"                                                  DataSource='<%# GetClassesByGradeID(Convert.ToString(Eval("GradeID"))) %>'

                  DataTextField='<%# GetClassesByGradeID(Convert.ToString(Eval("GradeID"))).Columns["ClassName"].ToString() %>'

                  DataValueField='<%# GetClassesByGradeID(Convert.ToString(Eval("GradeID"))).Columns["ClassID"].ToString()  %>'

              >

              </asp:CheckBoxList>

            </td>

          </tr>

       </table>

    </ItemTemplate>

 </asp:Repeater>

 </td>

</tr>

页面cs部分

------------

    #region 绑定年级信息 可在Page_Load时 调用该方法 进行页面绑定

    private void BindRepeaterGateway()

    {

        //...相关数据库访问省略

        DataSet ds = GetDataSetGrade();//两个字段 GradeID,GradeName

        if ((ds != null) && (ds.Tables[0].Rows.Count > 0))

        {

            DataSet ds1 = GetDataSetClass();//三个字段 GradeID,ClassID,ClassName

            ViewState.Add("dsClass", ds1);

            this.repeater_GradeClass.DataSource = ds.Tables[0];

            this.repeater_GradeClass.DataBind();

           

        } 

    }

    #endregion

    #region 根据年级GradeID 得到其下的班级Class

    protected DataTable GetRegItemsByGatewayID(string strGradeID)

    {

        if (ViewState["dsClass"] != null)

        {

            DataView dv = ((DataSet)ViewState["dsClass"]).Tables[0].DefaultView;

            dv.RowFilter = " GradeID = "+strGradeID+" ";

            DataTable dt = dv.ToTable();

            return dt;

        }

        else

        {

            return null;

        }

    }

    #endregion

       //取得选中的年级值

        string items = "";

        for (int i = 0; i < this.repeater_GradeClass.Items.Count; i++)

        {

            CheckBoxList chklist = (CheckBoxList)this.repeater_GradeClass.Items[i].FindControl("chklist_Classes");

            for (int j = 0; j < chklist.Items.Count; j++)

            {

                if (chklist.Items[j].Selected)

                    items += "," + chklist.Items[j].Value;

            }

        }

        if (items.Length > 0)

            items = items.Substring(1);