导读:用repeater嵌套CheckBox+CheckBoxList实现树型选择菜单
复制代码代码如下:
- <HTML>
- <body>
- <form id="Form1" runat="server">
- <asp:repeater id="parentRepeater" runat="server">
- <itemtemplate>
- <b>
- <asp:CheckBox id="CheckBoxRole" Text='<%# DataBinder.Eval(Container.DataItem,"RoleId") %>' runat="server" AutoPostBack="True" OnCheckedChanged="CheckBoxRole_CheckedChanged">
- </asp:CheckBox>
- <asp:CheckBoxList id="CheckBoxListUserId" Runat="server" DataValueField="RoleId"></asp:CheckBoxList>
- </b>
- <br>
- </itemtemplate>
- </asp:repeater>
- </form>
- </body>
- </HTML>
-
- 后台代码
- using System;
- using System.Collections;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Web;
- using System.Web.SessionState;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.HtmlControls;
- using System.Data.SqlClient;
-
- namespace center
- {
- ///
- /// NestedRepeater 的摘要说明。
- ///
- public class NestedRepeater : System.Web.UI.Page
- {
- protected System.Web.UI.WebControls.Repeater parentRepeater;
-
- private void Page_Load(object sender, System.EventArgs e)
- {
- if(!Page.IsPostBack)
- {
- // 在此处放置用户代码以初始化页面
- // 为Authors表创建 Connection 和 DataAdapter
- string cnnString = @"server=azure;database=CnForums;uid=sa;pwd=;";
- SqlConnection cnn = new SqlConnection(cnnString);
- SqlDataAdapter cmd1 = new SqlDataAdapter("select * from aspnet_Roles",cnn);
-
- //创建填充 DataSet.
- DataSet ds = new DataSet();
- cmd1.Fill(ds,"Roles");
-
- // 为Titles表创建 DataAdapter
- SqlDataAdapter cmd2 = new SqlDataAdapter("select * from aspnet_UsersInRoles",cnn);
- cmd2.Fill(ds,"Users");
-
- // 创建 Authors 表和 Titles 表之间的关系.
- ds.Relations.Add("myrelation",
- ds.Tables["Roles"].Columns["RoleId"],
- ds.Tables["Users"].Columns["RoleId"]);
-
- // 绑定Authors到父Repeater
- parentRepeater.DataSource = ds.Tables["Roles"];
- Page.DataBind();
-
- cnn.Close();
- cnn.Dispose();
- }
- }
-
- Web 窗体设计器生成的代码
-
- public void CheckBoxRole_CheckedChanged(object sender, System.EventArgs e)
- {
- for(int i=0;i<this.parentRepeater.Items.Count;i++)
- {
- CheckBox cb = (CheckBox)parentRepeater.Items[i].FindControl("CheckBoxRole");
- CheckBoxList cbl = (CheckBoxList)parentRepeater.Items[i].FindControl("CheckBoxListUserId");
- if (cb.Checked==true)
- {
- cbl.Visible=true;
- }
- if (cb.Checked==false)
- {
- cbl.Visible=false;
- }
- }
- }
-
- private void parentRepeater_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
- {
- string cnnString = @"server=azure;database=CnForums;uid=sa;pwd=;";
- SqlConnection cnn = new SqlConnection(cnnString);
- SqlDataAdapter cmd1 = new SqlDataAdapter("select * from aspnet_Roles",cnn);
- //创建填充 DataSet.
- DataSet ds = new DataSet();
- cmd1.Fill(ds,"Roles");
- //绑定checkboxlist
- CheckBoxList cb=(CheckBoxList)e.Item.FindControl("CheckBoxListUserId");
- DataRowView row=(DataRowView)e.Item.DataItem;
- string root=row["RoleId"].ToString();
- cb.DataSource=ds;
- cb.DataTextField="RoleId";
- cb.DataValueField="RoleId";
- cb.DataBind();
- }
- }
- }
-