|
带Checkbox的TreeView(一) 1、该节点可以访问,则他的父节点也必能访问; 2、该节点可以访问,则他的子节点也都能访问; 3、该节点不可访问,则他的子节点也不能访问; 4、该子节点不能访问,则他的父节点如果没有其他选择,则父节点也不能访问 html代码
<html xmlns="" target="_blank">http://www.w3.org/1999/xhtml"> <head runat="server"> <title>带Checkbox的Treeview</title>
<script language="javascript" type="text/javascript"> // JScript 文件 var flagCheck = false; //获取元素指定tagName的父元素 function public_GetParentByTagName(element, tagName) { var parent = element.parentNode; var upperTagName = tagName.toUpperCase(); //如果这个元素还不是想要的tag就继续上溯 while (parent && (parent.tagName.toUpperCase() != upperTagName)) { parent = parent.parentNode ? parent.parentNode : parent.parentElement; } return parent; } //设置节点的父节点Cheched——该节点可访问,则他的父节点也必能访问 function setParentChecked(objNode) { var objParentDiv = public_GetParentByTagName(objNode,"div"); if(objParentDiv==null || objParentDiv == "undefined") { return; } var objID = objParentDiv.getAttribute("ID"); objID = objID.substring(0,objID.indexOf("Nodes")); objID = objID+"CheckBox"; var objParentCheckBox = document.getElementById(objID); if(objParentCheckBox==null || objParentCheckBox == "undefined") { return; } if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox") return; objParentCheckBox.checked = true; setParentChecked(objParentCheckBox); } //检查此目录的上级中是否还有被选中的项,如果有则保持状态,没有则取消选择. function setParentUnCheckedforSignal(objNode) { var objParentDiv = public_GetParentByTagName(objNode,"div"); if(objParentDiv==null || objParentDiv == "undefined") { return; } var objID = objParentDiv.getAttribute("ID"); objID = objID.substring(0,objID.indexOf("Nodes")); objID = objID+"CheckBox";
var objParentCheckBox = document.getElementById(objID); if(objParentCheckBox==null || objParentCheckBox == "undefined") { return; }
if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox") { return; } flagCheck = false; checkChildChecked(objParentDiv); //alert(flagCheck) if(!flagCheck) { objParentCheckBox.checked = false; setParentUnCheckedforSignal(objParentDiv); } } //检查子目录是否被选中,如果选中则修改标志flagCheck function checkChildChecked(divID) { var objchild = divID.children; for(var i=0;i<objchild.length;i++) { var tempObj = objchild; //alert(tempObj.tagName + " " + tempObj.type); if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox") { if(tempObj.checked == true) flagCheck = true; } checkChildChecked(tempObj) } } //设置节点的子节点uncheched——该节点不可访问,则他的子节点也不能访问 function setChildUnChecked(divID) { var objchild = divID.children; var count = objchild.length; for(var i=0;i<objchild.length;i++) { var tempObj = objchild; if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox") { tempObj.checked = false; } setChildUnChecked(tempObj); } } //设置节点的子节点cheched——该节点可以访问,则他的子节点也都能访问 function setChildChecked(divID) { var objchild = divID.children; var count = objchild.length; for(var i=0;i<objchild.length;i++) { var tempObj = objchild; if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox") { tempObj.checked = true; } setChildChecked(tempObj); } } //触发事件 function CheckEvent() { var objNode = event.srcElement; if(objNode.tagName!="INPUT" || objNode.type!="checkbox") return; if(objNode.checked==true) { setParentChecked(objNode); var objID = objNode.getAttribute("ID"); var objID = objID.substring(0,objID.indexOf("CheckBox")); var objParentDiv = document.getElementById(objID+"Nodes"); if(objParentDiv==null || objParentDiv == "undefined") { return; } setChildChecked(objParentDiv); } else { setParentUnCheckedforSignal(objNode); var objID = objNode.getAttribute("ID"); var objID = objID.substring(0,objID.indexOf("CheckBox")); var objParentDiv = document.getElementById(objID+"Nodes"); if(objParentDiv==null || objParentDiv == "undefined") { return; } setChildUnChecked(objParentDiv); } } </script>
</head> <body> <form id="form1" runat="server"> <div> <asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes="All" ShowLines="True"> </asp:TreeView> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="show" /></div> </form> </body> </html>
c#
1using System; 2using System.Data; 3using System.Configuration; 4using System.Collections; 5using System.Web; 6using System.Web.Security; 7using System.Web.UI; 8using System.Web.UI.WebControls; 9using System.Web.UI.WebControls.WebParts; 10using System.Web.UI.HtmlControls; 11 12public partial class TreeView_TreeView_Check : System.Web.UI.Page 13{ 14 protected void Page_Load(object sender, EventArgs e) 15 { 16 if (!IsPostBack) 17 { 18 BuilderTree("00000", (TreeNode)null); 19 TreeView1.Attributes.Add("onclick", "CheckEvent()"); 20 21 } 22 } 23 private void BuilderTree(string ParentID, TreeNode pNode) 24 { 25 string strConn, strSql; 26 strConn = "Provider=SQLOLEDB;Data Source=.;Initial Catalog=pubs;Trusted_Connection=Yes;"; 27 strSql = "select * from T_MODULE_SYS"; 28 System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(strSql,strConn); 29 DataSet ds = new DataSet(); 30 da.Fill(ds, "T_MODULE_SYS"); 31 32 //XBGQWZ.BusinessLayer.T_Modle bus_model = new XBGQWZ.BusinessLayer.T_Modle(); 33 //DataSet ds = bus_model.GetList(""); 34 DataView dvTree = new DataView(ds.Tables[0]); 35 //过滤ParentID,得到当前的所有子节点 36 dvTree.RowFilter = "[MOD_PARENT_ID] = " + ParentID; 37 foreach (DataRowView row in dvTree) 38 { 39 TreeNode Node = new TreeNode(); 40 if (pNode == null) 41 { 42 //添加根节点 43 Node.Text = row["MOD_DESC"].ToString(); 44 Node.ToolTip = row["MOD_ID"].ToString(); 45 TreeView1.Nodes.Add(Node); 46 Node.Expanded = true; 47 BuilderTree(row["MOD_ID"].ToString(), Node);//递归 48 } 49 else 50 { 51 //添加当前节点的自节点 52 Node.Text = row["MOD_DESC"].ToString(); 53 Node.ToolTip = row["MOD_ID"].ToString(); 54 pNode.ChildNodes.Add(Node); 55 //pNode.Target = row["MOD_DESC"].ToString(); 56 Node.Target = "page_right"; 57 Node.NavigateUrl = " /";58 Node.Expanded = true; 59 BuilderTree(row["MOD_ID"].ToString(), Node);//递归 60 61 } 62 } 63 64 } 65 //遍历树 66 private void GetAllNodeText(TreeNodeCollection tnc) 67 { 68 foreach (TreeNode node in tnc) 69 { 70 if (node.ChildNodes.Count != 0) 71 72 GetAllNodeText(node.ChildNodes); 73 if (node.Checked == true) 74 { 75 Response.Write(node.Text + " "); 76 Response.Write(node.ToolTip + " "); 77 Response.Write("<br/>"); 78 } 79 } 80 } 81 //在button的click事件中将其输出 82 protected void Button1_Click(object sender, EventArgs e) 83 { 84 GetAllNodeText(this.TreeView1.Nodes); 85 } 86 87}
表结构
CREATE TABLE [T_MODULE_SYS] ( [MOD_ID] [varchar] (50) NOT NULL, [MOD_PARENT_ID] [varchar] (50) NOT NULL, [MOD_DESC] [varchar] (150) NOT NULL)
ALTER TABLE [T_MODULE_SYS] WITH NOCHECK ADD CONSTRAINT [PK_T_MODULE_SYS] PRIMARY KEY NONCLUSTERED ( [MOD_ID] )INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00001','00000','开始') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00002','00001','程序') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00003','00001','设置') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00004','00001','运行') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00005','00002','管理工具') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00006','00002','附件') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00007','00002','启动') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00008','00005','INTERNET 服务管理器') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00009','00005','计算机管理') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00010','00006','计算器') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00011','00003','控制面版') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00012','00003','打印机') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00013','00009','系统工具') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00014','00009','存储') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00015','00013','事件查看器') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00016','00013','共享文件夹') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00017','00013','本地用户和组') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00018','00014','可移动存储') INSERT [T_MODULE_SYS] ([MOD_ID],[MOD_PARENT_ID],[MOD_DESC]) VALUES ( '00019','00014','磁盘管理')
|