希望有實力的朋友了以后能指點我改一下選中和不選中的遞歸
前臺代碼

<div style="font-size:14px;"> <asp:TreeView ShowCheckBoxes="All" ID="usertree" runat="server" OnTreeNodeCheckChanged="MyTreeView_TreeNodeCheckChanged" OnSelectedNodeChanged="MyTreeView_SelectedNodeChanged" > </asp:TreeView> </div> <div style="float:left;"> <span style="display:block">要參加人員:</span> <asp:ListBox ID="NeedExamStaff" AutoPostBack="true" runat="server" Height="262px" Width="116px" SelectionMode="MultView Code后臺代碼
DataTable dt = new DataTable(); PRotected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { SqlConnection conn = new SqlConnection(); conn.ConnectionString = "User ID=sa;Initial Catalog=newtest;Data Source=JJ-PC;PassWord=123"; // 打開連接 if (conn.State == ConnectionState.Closed) { conn.Open(); } var sql = "select * from city"; // 初始化命令 SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = sql; // 用于執(zhí)行數(shù)據(jù)插入、更新和刪除的操作;返回被影響的行數(shù)。 int i = cmd.ExecuteNonQuery(); // 如果想獲取數(shù)據(jù)集合的話我們經(jīng)常使用到的是數(shù)據(jù)適配器 SqlDataAdapter adapter = new SqlDataAdapter(); adapter.SelectCommand = cmd; adapter.Fill(dt); this.usertree.Nodes.Clear(); usertree.Attributes.Add("onclick", " postBackByObject()"); AddTree(110000, (TreeNode)null); } } //遞歸添加樹的節(jié)點 public void AddTree(int ParentID, TreeNode pNode) { DataTable ds = dt; DataView dvTree = new DataView(ds); //過濾ParentID,得到當(dāng)前的所有子節(jié)點 dvTree.RowFilter = "[fatherID] = " + ParentID; foreach (DataRowView Row in dvTree) { TreeNode Node = new TreeNode(); if (pNode == null) { //添加根節(jié)點 Node.Text = Row[2].ToString(); Node.Value = Row[1].ToString(); this.usertree.Nodes.Add(Node); Node.Expanded = true; Node.ShowCheckBox = true; //再次遞歸 AddTree(Int32.Parse(Row[1].ToString()), Node); } else { //添加當(dāng)前節(jié)點的子節(jié)點 Node.Text = Row[2].ToString(); Node.Value = Row[1].ToString(); pNode.ChildNodes.Add(Node); Node.Expanded = true; Node.ShowCheckBox = true; //再次遞歸 AddTree(Int32.Parse(Row[1].ToString()), Node); } } } protected void MyTreeView_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e) { TreeNode node = e.Node; var nodeCount = node.ChildNodes.Count; if (node.Checked == true) { if (nodeCount > 0) { for (var i = 0; i < nodeCount; i++) { node.ChildNodes[i].Checked = true; var node1Count = node.ChildNodes[i].ChildNodes.Count; if (node1Count > 0) { for (var k = 0; k < node1Count; k++) { node.ChildNodes[i].ChildNodes[k].Checked = true; var node2Count = node.ChildNodes[i].ChildNodes[k].ChildNodes.Count; if (node2Count > 0) { for (var j = 0; j < node2Count; j++) { node.ChildNodes[i].ChildNodes[k].ChildNodes[j].Checked = true; } } } } } } } else { if (nodeCount > 0) { for (var i = 0; i < nodeCount; i++) { node.ChildNodes[i].Checked = false; var node1Count = node.ChildNodes[i].ChildNodes.Count; if (node1Count > 0) { for (var k = 0; k < node1Count; k++) { node.ChildNodes[i].ChildNodes[k].Checked = false; var node2Count = node.ChildNodes[i].ChildNodes[k].ChildNodes.Count; if (node2Count > 0) { for (var j = 0; j < node2Count; j++) { node.ChildNodes[i].ChildNodes[k].ChildNodes[j].Checked = false; } } } } } } } } protected void MyTreeView_SelectedNodeChanged(object sender, EventArgs e) { var tt = usertree.SelectedNode.Checked; var dd = usertree.SelectedValue; databind(); } public void databind() { if (usertree.SelectedNode.Checked == false) { if (usertree.SelectedNode.ChildNodes.Count > 0) { foreach (TreeNode subNode in usertree.SelectedNode.ChildNodes) { usertree.SelectedNode.Checked = true; subNode.Checked = true; if (subNode.ChildNodes.Count > 0) { foreach (TreeNode subNode2 in subNode.ChildNodes) { subNode2.Checked = true; if (subNode2.ChildNodes.Count > 0) { foreach (TreeNode subNode3 in subNode2.ChildNodes) { subNode3.Checked = true
新聞熱點
疑難解答