问题是这样的,就是在一个列表控件中有一个CheckBOX,一个CheckList。CheckBox里显示的是年级,而CheckList中显示是根据不同年级开设的课目。
这里列表控件可以采用任意,我用的是DataList.
下面是代码:
前台:
后台
这里要说明的是,一个列表控件来里嵌套了二个控制。一个是CheckBox,一个是CheckBoxList。在选中CheckBox时,它下面的CheckBoxList要被全选中。我认为里是一个要注意的地方。
如果你有更好的方法,请留言告诉我。十分感谢
这里列表控件可以采用任意,我用的是DataList.
下面是代码:
前台:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="HEasySchoolWebSmS.Admin.WebForm2" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title></title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- </div>
- <asp:DataList ID="DataList1" runat="server" onitemdatabound="DataList1_ItemDataBound1">
- <ItemTemplate>
- <tr>
- <td>
- <asp:CheckBox oncheckedchanged="cbP_CheckedChanged" Text=<%# Eval("Class")%> ID="cbP" runat="server"
- AutoPostBack="True" />
- <asp:CheckBoxList runat="server" ID="cbl"></asp:CheckBoxList>
- </td></tr>
- </ItemTemplate>
- </asp:DataList>
- <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
- </form>
- </body>
- </html>
后台
- using System;
- using System.Collections;
- using System.Configuration;
- using System.Data;
- using System.Linq;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.HtmlControls;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Xml.Linq;
- using System.Xml;
- using System.IO;
- using Webb.WAVE.Controls.Upload;
- using System.Collections.Generic;
- using CL.NET.UI.WebControls;
- namespace HEasySchoolWebSmS.Admin
- {
- public partial class WebForm2 : System.Web.UI.Page
- {
- //===================================== 初始化AspxBase PowerBest组件 ==========================================
- AspxBase.PowerBest.SystemBaseClass SystemBaseClass = new AspxBase.PowerBest.SystemBaseClass();
- AspxBase.PowerBest.SystemADOClass SystemADOClass = new AspxBase.PowerBest.SystemADOClass();
- AspxBase.PowerBest.SystemIOClass SystemIOClass = new AspxBase.PowerBest.SystemIOClass();
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!Page.IsPostBack)
- {
- //getParentRe();
- this.DataList1.DataSource = getParentReCheck(5);
- this.DataList1.DataBind();
- }
- }
- //根据传进来的数值,来判断这里要显示几个年级,因为中国的小学与初中是分五,六年制和三,四年制的。万恶的教育体制
- public DataTable getParentReCheck(int num)
- {
- DataTable dt = new DataTable();
- DataColumn dc = new DataColumn();
- dc.ColumnName = "Class";
- dt.Columns.Add(dc);
- for (int i = 0; i < 6; i++)
- {
- DataRow dr = dt.NewRow();
- dr["Class"] = (i + 1).ToString() + "年级";
- dt.Rows.Add(dr);
- }
- return dt;
- }
- //此处主要是用来做测试用的,如果你不想连接数据库,在下面DataList1_ItemDataBound1方面中,调用它给值就行了。
- public DataTable getChildRe()
- {
- DataTable dt = new DataTable();
- DataColumn dc = new DataColumn();
- dc.ColumnName = "GSubjectname";
- dt.Columns.Add(dc);
- for (int i = 0; i < 6; i++)
- {
- DataRow dr = dt.NewRow();
- dr["GSubjectname"] = (i + 1).ToString() + "科目";
- dt.Rows.Add(dr);
- }
- return dt;
- }
- //如果选择年级前面的单选框,哪么,它下面的科目复选框就得被选中
- protected void cbP_CheckedChanged(object sender, EventArgs e)
- {
- for (int j = 0; j < this.DataList1.Items.Count; j++)
- {
- CheckBox CB = (CheckBox)this.DataList1.Items[j].FindControl("cbP");
- if (CB.Checked == true)
- {
- CheckBoxList CBL1 = (CheckBoxList)this.DataList1.Items[j].FindControl("cbl");
- for (int i = 0; i < CBL1.Items.Count; i++)
- {
- CBL1.Items[i].Selected = true;
- }
- }
- else
- {
- CheckBoxList CBL1 = (CheckBoxList)this.DataList1.Items[j].FindControl("cbl");
- for (int i = 0; i < CBL1.Items.Count; i++)
- {
- CBL1.Items[i].Selected = false;
- }
- }
- }
- }
- protected void DataList1_ItemDataBound1(object sender, DataListItemEventArgs e)
- {
- if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
- {
- CheckBoxList MyCbl = (CheckBoxList)e.Item.FindControl("cbl");
- //CheckBox myCB = (CheckBox)e.Item.FindControl("cbP");
- if (MyCbl != null)
- {
- //这里的代码,是一段我做测试的你也可以用
- //myCbl.DataSource = getChildRe();来绑定
- string strsql = "SELECT distinct GSubjectname from metaGradeSubjectRelationView where gradetypeid='1' and Gradeid='1'";
- DataTable dt = DataBaseClass.ExecuteDataSetReader(DataBaseClass.DataBaseConnResourceView, System.Data.CommandType.Text, strsql).Tables[0];
- MyCbl.DataSource = dt;
- MyCbl.DataTextField = "GSubjectname";
- MyCbl.DataValueField = "GSubjectname";
- MyCbl.DataBind();
- }
- }
- }
- protected void Button1_Click(object sender, EventArgs e)
- {
- //这里主要是为了把年级值与科目名取出来用。
- //因为年级值,是通过我自己定义的table来取的,所以这里不能用foreach(DataListItem item in this.DataList1.Items)
- //这里的J值就是年级值了
- string strSubject = "";
- string strNum = "";
- for (int j = 0; j < this.DataList1.Items.Count; j++)
- {
- CheckBoxList CBL1 = (CheckBoxList)this.DataList1.Items[j].FindControl("cbl");
- for (int i = 0; i < CBL1.Items.Count; i++)
- {
- if (CBL1.Items[i].Selected == true)
- {
- strNum += (j + 1).ToString() + ",";
- strSubject += CBL1.Items[i].Text + ",";
- }
- }
- }
- Response.Write(strNum.Substring(0,strNum.Length-1) + "<br>");
- Response.Write(strSubject.Substring(0, strSubject.Length - 1));
- }
- }
- }
这里要说明的是,一个列表控件来里嵌套了二个控制。一个是CheckBox,一个是CheckBoxList。在选中CheckBox时,它下面的CheckBoxList要被全选中。我认为里是一个要注意的地方。
如果你有更好的方法,请留言告诉我。十分感谢