1 <asp:TreeView ID="treeview" OnClick="TreeViewCheckBox_Click()" runat="server"> 2 </asp:TreeView>
treeview.ShowCheckBoxes = TreeNodeTypes.All; treeview.ShowLines = true; treeview.ExpandDepth = 1; treeview.TreeNodeCheckChanged += new TreeNodeEventHandler(treeview_TreeNodeCheckChanged); if (!IsPostBack) { string url = "../../Xml/LayerConfig11.xml"; url = Server.MapPath(url); XmlDocument xDoc = new XmlDocument(); xDoc.Load(url); XmlNode fn = xDoc.DocumentElement; TreeNode tn = new TreeNode(); tn.Text = fn.Attributes["Name"].Value; tn.ImageUrl = fn.Attributes["Icon"].Value; tn.SelectAction = TreeNodeSelectAction.None; treeview.Nodes.Add(tn); for (int i = 0; i < treeview.Nodes.Count; i++) { if (treeview.Nodes[i].Checked) { treeview.Nodes[i].Parent.Checked = true; } } XmlNodeList nodes = fn.ChildNodes; foreach (XmlNode item in nodes) { if (item.Attributes["No"].Value == "06" || item.Attributes["No"].Value == "00") { TreeNode tn02 = new TreeNode(); tn02.Text = item.Attributes["Name"].Value; tn02.ImageUrl = item.Attributes["Icon"].Value; tn02.SelectAction = TreeNodeSelectAction.None; tn.ChildNodes.Add(tn02); AddNodes(tn02, item); } } }
1 void treeview_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) 2 { 3 TreeNode tn = e.Node; 4 bool IsChecked = tn.Checked; 5 6 CheckTreeNodeParent(tn, IsChecked); 7 8 CheckTreeNodeChildren(tn, IsChecked); 9 }
1 /// <summary> 2 /// 选中父类节点 3 /// </summary> 4 /// <param name="tn"></param> 5 /// <param name="Checked"></param> 6 private void CheckTreeNodeParent(TreeNode tn, bool Checked) 7 { 8 TreeNode ptn = tn.Parent; 9 10 if (ptn != null) 11 { 12 if (Checked) 13 { 14 ptn.Checked = Checked; 15 CheckTreeNodeParent(ptn, Checked); 16 } 17 else 18 { 19 bool HasTreeNodeChecked = HasCheckedTreeNode(ptn); 20 if (!HasTreeNodeChecked) 21 { 22 ptn.Checked = Checked; 23 CheckTreeNodeParent(ptn, Checked); 24 } 25 } 26 } 27 }
1 private bool HasCheckedTreeNode(TreeNode tn) 2 { 3 bool IsChecked = false; 4 if (tn != null) 5 { 6 TreeNodeCollection tns = tn.ChildNodes; 7 if (tns != null) 8 { 9 for (int i = 0; i < tns.Count; i++) 10 { 11 if (tns[i].Checked) 12 { 13 IsChecked = true; 14 break; 15 } 16 else 17 { 18 HasCheckedTreeNode(tns[i]); 19 } 20 } 21 } 22 } 23 24 return IsChecked; 25 }
1 private void CheckTreeNodeChildren(TreeNode tn, bool Checked) 2 { 3 TreeNodeCollection tns = tn.ChildNodes; 4 if (tns != null) 5 { 6 for (int i = 0; i < tns.Count; i++) 7 { 8 tns[i].Checked = Checked; 9 10 CheckTreeNodeChildren(tns[i], Checked); 11 } 12 } 13 }
1 /// <summary> 2 /// 递归绑定节点 3 /// </summary> 4 /// <param name="tnode">父级节点</param> 5 /// <param name="xnode">源节点</param> 6 private void AddNodes(TreeNode tnode, XmlNode xnode) 7 { 8 if (xnode.HasChildNodes) 9 { 10 foreach (XmlNode child in xnode.ChildNodes) 11 { 12 TreeNode tn03 = new TreeNode(); 13 tn03.Text = child.Attributes["Name"].Value; 14 tn03.ImageUrl = child.Attributes["Icon"].Value; 15 tn03.SelectAction = TreeNodeSelectAction.None; 16 tnode.ChildNodes.Add(tn03); 17 if (child.HasChildNodes) 18 { 19 AddNodes(tn03, child); 20 } 21 else 22 { 23 continue; 24 } 25 } 26 } 27 }