把TreeView的CheckBox选中值插入数据库,从数据库中读取数据后让CheckBox勾选
1、执行下面代码创建表NZ_Power
CREATE TABLE [dbo].[NZ_Power](
[nz_id] [int] IDENTITY(1,1) NOT NULL primary key,
[nz_column] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
[nz_parentid] [int] NOT NULL,
)
2、前台代码
1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TreeView.aspx.cs" Inherits="Common.TreeView" %> 2 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 4 5 <html xmlns="http://www.w3.org/1999/xhtml" > 6 <head runat="server"> 7 <title>无标题页</title> 8 <script language="javascript"type="text/javascript" src="js/TreeViewCheckState.js"></script> 9 </head> 10 <body> 11 <form id="form1" runat="server"> 12 <div style="width:200px; margin:0 auto;"> 13 <asp:TreeView ID="TVPower" runat="server" ShowCheckBoxes="All" ShowLines="True" > 14 </asp:TreeView> 15 <asp:Button ID="Button1" runat="server" Text="提交" OnClick="Button1_Click" /> 16 <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="默认" /><br /> 17 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></div> 18 </form> 19 </body> 20 </html>
3、【TreeViewCheckState.js】代码
View Code
//TreeView onclick 触发事件 function client_OnTreeNodeChecked(event) { //得到当前所 Click 的对象 var objNode; if(!public_IsObjectNull(event.srcElement)) { //IE objNode = event.srcElement; } else { //FF objNode = event.target; } //判断是否 Click 的 CheckBox if(!public_IsCheckBox(objNode)) return; var objCheckBox = objNode; //根据CheckBox状态进行相应处理 if(objCheckBox.checked==true) { //递归选中父节点的 CheckBox setParentChecked(objCheckBox); //递归选中所有的子节点 setChildChecked(objCheckBox); } else { //递归取消选中所有的子节点 setChildUnChecked(objCheckBox); //递归取消选中父节点(如果当前节点的所有其他同级节点也都未被选中). setParentUnChecked(objCheckBox); } } //判断对象是否为空 function public_IsObjectNull(element) { if(element==null || element == "undefined") return true; else return false; } //判断对象是否为 CheckBox function public_IsCheckBox(element) { if(public_IsObjectNull(element)) return false; if(element.tagName!="INPUT" || element.type!="checkbox") return false; else return true; } //得到包含所有子节点的 Node(Div 对象) function public_CheckBox2Node(element) { var objID = element.getAttribute("ID"); objID = objID.substring(0,objID.indexOf("CheckBox")); return document.getElementById(objID+"Nodes"); } //得到父节点的 CheckBox function public_Node2CheckBox(element) { var objID = element.getAttribute("ID"); objID = objID.substring(0,objID.indexOf("Nodes")); return document.getElementById(objID+"CheckBox"); } //得到本节点所在的 Node(Div 对象) function public_GetParentNode(element) { var parent = element.parentNode; var upperTagName = "DIV"; //如果这个元素还不是想要的 tag 就继续上溯 while (parent && (parent.tagName.toUpperCase() != upperTagName)) { parent = parent.parentNode ? parent.parentNode : parent.parentElement; } return parent; } //设置节点的父节点 Checked function setParentChecked(currCheckBox) { var objParentNode= public_GetParentNode(currCheckBox); if(public_IsObjectNull(objParentNode)) return; var objParentCheckBox = public_Node2CheckBox(objParentNode); if(!public_IsCheckBox(objParentCheckBox)) return; objParentCheckBox.checked = true; setParentChecked(objParentCheckBox); } //当父节点的所有子节点都未被选中时,设置父节点 UnChecked function setParentUnChecked(currCheckBox) { var objParentNode= public_GetParentNode(currCheckBox); if(public_IsObjectNull(objParentNode)) return; //判断 currCheckBox 的同级节点是否都为 UnChecked. if(!IsMyChildCheckBoxsUnChecked(objParentNode)) return; var objParentCheckBox = public_Node2CheckBox(objParentNode); if(!public_IsCheckBox(objParentCheckBox)) return; objParentCheckBox.checked = false; setParentUnChecked(objParentCheckBox); } //设置节点的子节点 UnChecked function setChildUnChecked(currObj) { var currNode; if(public_IsCheckBox(currObj)) { currNode = public_CheckBox2Node(currObj); if (public_IsObjectNull(currNode)) return; } else currNode = currObj; var currNodeChilds = currNode.childNodes; var count = currNodeChilds.length; for(var i=0;i<count;i++) { var childCheckBox = currNodeChilds[i]; if(public_IsCheckBox(childCheckBox)) { childCheckBox.checked = false; } setChildUnChecked(childCheckBox); } } //设置节点的子节点 Checked function setChildChecked(currObj) { var currNode; if(public_IsCheckBox(currObj)) { currNode = public_CheckBox2Node(currObj); if (public_IsObjectNull(currNode)) return; } else currNode = currObj; var currNodeChilds = currNode.childNodes; var count = currNodeChilds.length; for(var i=0;i<count;i++) { var childCheckBox = currNodeChilds[i]; if(public_IsCheckBox(childCheckBox)) { childCheckBox.checked = true; } setChildChecked(childCheckBox); } } //判断该节点的子节点是否都为 UnChecked function IsMyChildCheckBoxsUnChecked(currObj) { var retVal = true; var currNode; if(public_IsCheckBox(currObj) && currObj.checked == true) { return false; } else currNode = currObj; var currNodeChilds = currNode.childNodes; var count = currNodeChilds.length; for(var i=0;i<count;i++) { if (retVal == false) break; var childCheckBox = currNodeChilds[i]; if(public_IsCheckBox(childCheckBox) && childCheckBox.checked == true) { retVal = false; return retVal; } else retVal = IsMyChildCheckBoxsUnChecked(childCheckBox); } return retVal; }
4、后台代码
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Data.SqlClient; namespace Common { public partial class TreeView : System.Web.UI.Page { private static readonly string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { selectParent(new SqlConnection(connectionString)); //GetCheckNode(); } TVPower.Attributes.Add("OnClick", "client_OnTreeNodeChecked(event);"); } #region//无限极树 public void selectParent(SqlConnection conn) { string sql = "select * from NZ_Power where nz_parentid=0"; DataTable dt = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(sql, conn); da.Fill(dt); for (int i = 0; i < dt.Rows.Count; i++) { TreeNode tn = new TreeNode(); tn.Text = dt.Rows[i]["nz_column"].ToString(); tn.Value = dt.Rows[i]["nz_id"].ToString(); tn.Expanded = false; this.TVPower.Nodes.Add(tn); selectChild(tn); } } /// <summary> /// 递归查询子节点 /// </summary> public void selectChild(TreeNode tnn) { string sql = "select * from NZ_Power where nz_parentid=" + tnn.Value + ""; DataTable dt1 = new DataTable(); SqlDataAdapter da = new SqlDataAdapter(sql, new SqlConnection(connectionString)); da.Fill(dt1); for (int i = 0; i < dt1.Rows.Count; i++) { TreeNode tn = new TreeNode(); tn.Text = dt1.Rows[i]["nz_column"].ToString(); tn.Value = dt1.Rows[i]["nz_id"].ToString(); tn.Expanded = false; tnn.ChildNodes.Add(tn); selectChild(tn); } } #endregion #region//取得选中值 protected void Button1_Click(object sender, EventArgs e) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); foreach (TreeNode tnd in TVPower.CheckedNodes) { sb.Append(tnd.Value + "|"); } sb.Length -= 1; if (sb.ToString().Length == 0) { Label1.Text = "没有任何权限"; } else { Label1.Text = sb.ToString(); } } #endregion #region //根据uid从数据库中读取数据,然后勾选根节点的相应的CheckBox /// <summary> /// 从数据库中读取数据,然后勾选根节点的相应的CheckBox /// </summary> /// <param name="RoleId"></param> protected void BindTreeRoot(int [] strArray, TreeNodeCollection treenode) { foreach (TreeNode nodes in treenode) { if (nodes.ChildNodes.Count > 0) { //根据UID查找赋值 for (int i = 0; i < strArray.Length; i++) { if (strArray[i].ToString() == nodes.Value.ToString()) { nodes.Checked = true; } BindTreeRoot(strArray, nodes.ChildNodes); } } else { for (int i = 0; i < strArray.Length; i++) { if (strArray[i].ToString() == nodes.Value.ToString()) { nodes.Checked = true; } BindTreeRoot(strArray, nodes.ChildNodes); } } } } #endregion protected void Button2_Click(object sender, EventArgs e) { int[] strValue ={ 2, 4, 5, 6, 7, 9, 10, 33, 34, 35 };//初始选中节点的value【此处可以是从数据库读取的数据然后放到数组中】 BindTreeRoot(strValue, TVPower.Nodes); } } }
5、结果