TreeView 操作应用
1 在窗体Form_Load里面初始化TreeView
 /// <summary>
    /// <summary>
 /// 初始化TreeView
        /// 初始化TreeView
 /// </summary>
        /// </summary>
 private void InitTreeview()
        private void InitTreeview()
 {
        {
 try
            try
 {
            {
 treeView1.CheckBoxes = true;
                treeView1.CheckBoxes = true;
 treeView1.Nodes.Clear();
                treeView1.Nodes.Clear();
 dt_menu=new DataTable("dt_rightTable");
                dt_menu=new DataTable("dt_rightTable");                
 dt_menu.Columns.Add("ID", typeof(String));
                dt_menu.Columns.Add("ID", typeof(String));
 dt_menu.Columns.Add("RightName", typeof(String));
                dt_menu.Columns.Add("RightName", typeof(String));
 dt_menu.Columns.Add("ParentID", typeof(String));
                dt_menu.Columns.Add("ParentID", typeof(String));    

 DataRow dr;
                DataRow dr;
 增加权限数据表
                增加权限数据表
 AddTree(0, (TreeNode)null);
                AddTree(0, (TreeNode)null);
 
                             
 }
            }
 catch (Exception exc)
            catch (Exception exc)
 {
            {
 MessageBox.Show(exc.Message);
                MessageBox.Show(exc.Message);
 }
            }
 }
        }
其中用到方法:
 /// <summary>
    /// <summary>
 ///  递归添加树的节点
        ///  递归添加树的节点
 /// </summary>
        /// </summary>
 /// <param name="ParentID">父节点ID</param>
        /// <param name="ParentID">父节点ID</param>
 /// <param name="pNode">节点</param>
        /// <param name="pNode">节点</param>
 public void AddTree(int ParentID,TreeNode pNode)
        public void AddTree(int ParentID,TreeNode pNode) 
 {
        {
 DataView dvTree = new DataView(dt_menu);
            DataView dvTree = new DataView(dt_menu);
 dvTree.RowFilter =  "[ParentID] = " + ParentID;
            dvTree.RowFilter =  "[ParentID] = " + ParentID;
 foreach(DataRowView Row in dvTree)
            foreach(DataRowView Row in dvTree) 
 {
            {
 TreeNode Node=new TreeNode() ;
                TreeNode Node=new TreeNode() ;

 TreeNode node_temp=new TreeNode();
                TreeNode node_temp=new TreeNode();

 if(pNode == null)
                if(pNode == null) 
 {
                {
 //增加根节点
                    //增加根节点
 node_temp.Text =Row["RightName"].ToString();
                    node_temp.Text =Row["RightName"].ToString();
 node_temp.Tag =Row["ID"].ToString();
                    node_temp.Tag =Row["ID"].ToString();
 treeView1.Nodes.Add(node_temp);
                    treeView1.Nodes.Add(node_temp);
 AddTree(Int32.Parse(Row["ID"].ToString()),node_temp);    //再次递归
                    AddTree(Int32.Parse(Row["ID"].ToString()),node_temp);    //再次递归
 }
                }
 else
                else
 {
                {
 node_temp.Text =Row["RightName"].ToString();
                    node_temp.Text =Row["RightName"].ToString();
 node_temp.Tag =Row["ID"].ToString();
                    node_temp.Tag =Row["ID"].ToString();
 pNode.Nodes.Add(node_temp);
                    pNode.Nodes.Add(node_temp);
 AddTree(Int32.Parse(Row["ID"].ToString()),node_temp);    //再次递归
                    AddTree(Int32.Parse(Row["ID"].ToString()),node_temp);    //再次递归
 }
                }
 }
            }            
 }
        }
在TreeView的AfterCheck事件里面编写如下代码:
 private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
    private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
 {
        {
 //单击了treeView控件所触发的事件
            //单击了treeView控件所触发的事件
 //MessageBox.Show(e.Node.Index.ToString());
            //MessageBox.Show(e.Node.Index.ToString());
 //如果夫节点下面有子节点则全部选中
            //如果夫节点下面有子节点则全部选中
 if(e.Action != TreeViewAction.Unknown)
            if(e.Action != TreeViewAction.Unknown)
 {
            {
 if(e.Node.Nodes.Count > 0)
                if(e.Node.Nodes.Count > 0)
 {
                {
 this.CheckAllChildNodes(e.Node, e.Node.Checked);
                    this.CheckAllChildNodes(e.Node, e.Node.Checked);
 }
                }
 //如果选中子节点同时选中父节点
                //如果选中子节点同时选中父节点
 if(e.Node.Checked == true)
                if(e.Node.Checked == true)
 {
                {
 this.selectParent(e.Node);
                    this.selectParent(e.Node);
 }
                }
 //如果取消子选择子节点,而且当所有本及子节点未选中时,取消父级节点
                //如果取消子选择子节点,而且当所有本及子节点未选中时,取消父级节点
 if(e.Node.Checked == false)
                if(e.Node.Checked == false)
 {
                {
 this.cancelParent(e.Node);
                    this.cancelParent(e.Node);
 
                
 }
                }
 }
            }                
 }
        }
使用到的方法:
 public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
    public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
 {
        {
 foreach(TreeNode node in treeNode.Nodes)
            foreach(TreeNode node in treeNode.Nodes)
 {
            {
 node.Checked = nodeChecked;
                node.Checked = nodeChecked;
 if(node.Nodes.Count > 0)
                if(node.Nodes.Count > 0)
 {
                {
 this.CheckAllChildNodes(node, nodeChecked);
                    this.CheckAllChildNodes(node, nodeChecked);
 }
                }
 }
            }
 }
        }

 //取消上级节点
        //取消上级节点
 private void cancelParent(TreeNode node)
        private void cancelParent(TreeNode node)
 {
        {
 if(node.Parent != null)
            if(node.Parent != null)
 {
            {
 bool isCheck = false;
                bool isCheck = false;
 foreach(TreeNode n in node.Parent.Nodes)
                foreach(TreeNode n in node.Parent.Nodes)
 {
                {
 if(n.Checked == true)
                    if(n.Checked == true)
 isCheck = true;
                        isCheck = true;
 }
                }
 if(!isCheck)
                if(!isCheck)
 node.Parent.Checked = false;
                    node.Parent.Checked = false;
 }
            }
 }
        }
 
        
 //设置选中父节点
        //设置选中父节点
 private void selectParent(TreeNode node)
        private void selectParent(TreeNode node)
 {
        {
 if(node.Parent != null && node.Parent.Checked == false)
            if(node.Parent != null && node.Parent.Checked == false)
 {
            {
 node.Parent.Checked = true;
                node.Parent.Checked = true;
 if(node.Parent.Parent != null)
                if(node.Parent.Parent != null)
 this.selectParent(node.Parent);
                    this.selectParent(node.Parent);
 }
            }
 }
        }
取消TreeView里面所有的钩
 private void simpleButton4_Click(object sender, System.EventArgs e)
    private void simpleButton4_Click(object sender, System.EventArgs e)
 {
        {
 System.Windows.Forms.TreeNodeCollection nodes=treeView1.Nodes;
            System.Windows.Forms.TreeNodeCollection nodes=treeView1.Nodes;
 ClearSelectTree(nodes);
            ClearSelectTree(nodes);
 }    //清除所有打勾选项
        }    //清除所有打勾选项
 private void ClearSelectTree(System.Windows.Forms.TreeNodeCollection nodes)
        private void ClearSelectTree(System.Windows.Forms.TreeNodeCollection nodes)
 {
        {            
 foreach(System.Windows.Forms.TreeNode node in nodes)
            foreach(System.Windows.Forms.TreeNode node in nodes) 
 {
            {  
 node.Checked =false;
                node.Checked =false;                
 ClearSelectTree(node.Nodes); //递归查找
                ClearSelectTree(node.Nodes); //递归查找                 
 }
            } 
 }
        }
给每个TreeView里面节点的Tag加str_right 这里str_right是全局变量
 GetAllNode(treeView1.Nodes);
遍历所有的节点:
            GetAllNode(treeView1.Nodes);
遍历所有的节点:
 /// <summary>
    /// <summary>
 /// 遍历treeview  调用GetAllNode(treeView1.Nodes)
        /// 遍历treeview  调用GetAllNode(treeView1.Nodes)
 /// </summary>
        /// </summary>
 /// <param name="nodes"></param>
        /// <param name="nodes"></param>
 private void GetAllNode(System.Windows.Forms.TreeNodeCollection nodes)
        private void GetAllNode(System.Windows.Forms.TreeNodeCollection nodes) 
 {
        { 
 foreach(System.Windows.Forms.TreeNode node in nodes)
            foreach(System.Windows.Forms.TreeNode node in nodes) 
 {
            {  
 if (node.Checked)
                if (node.Checked)
 {
                {
 if (str_right!="")
                    if (str_right!="")
 {
                    {
 str_right+=";"+node.Tag.ToString();
                        str_right+=";"+node.Tag.ToString();
 }
                    }
 else
                    else
 {
                    {
 str_right=node.Tag.ToString();
                        str_right=node.Tag.ToString();
 }
                    }                    
 }
                }
 GetAllNode(node.Nodes); //递归查找
                GetAllNode(node.Nodes); //递归查找 
 
                
 }
            } 
 }
        } 
下面判断是否打钩
 treeView1.Nodes[Convert.ToInt32(ch_array[0].ToString())-1].Nodes[Convert.ToInt32(ch_array[1].ToString())-1].Checked=true;
treeView1.Nodes[Convert.ToInt32(ch_array[0].ToString())-1].Nodes[Convert.ToInt32(ch_array[1].ToString())-1].Checked=true;
 /// <summary>
    /// <summary> /// 初始化TreeView
        /// 初始化TreeView /// </summary>
        /// </summary> private void InitTreeview()
        private void InitTreeview() {
        { try
            try {
            { treeView1.CheckBoxes = true;
                treeView1.CheckBoxes = true; treeView1.Nodes.Clear();
                treeView1.Nodes.Clear(); dt_menu=new DataTable("dt_rightTable");
                dt_menu=new DataTable("dt_rightTable");                 dt_menu.Columns.Add("ID", typeof(String));
                dt_menu.Columns.Add("ID", typeof(String)); dt_menu.Columns.Add("RightName", typeof(String));
                dt_menu.Columns.Add("RightName", typeof(String)); dt_menu.Columns.Add("ParentID", typeof(String));
                dt_menu.Columns.Add("ParentID", typeof(String));    
 DataRow dr;
                DataRow dr; 增加权限数据表
                增加权限数据表 AddTree(0, (TreeNode)null);
                AddTree(0, (TreeNode)null); 
                              }
            } catch (Exception exc)
            catch (Exception exc) {
            { MessageBox.Show(exc.Message);
                MessageBox.Show(exc.Message); }
            } }
        }其中用到方法:
 /// <summary>
    /// <summary> ///  递归添加树的节点
        ///  递归添加树的节点 /// </summary>
        /// </summary> /// <param name="ParentID">父节点ID</param>
        /// <param name="ParentID">父节点ID</param> /// <param name="pNode">节点</param>
        /// <param name="pNode">节点</param> public void AddTree(int ParentID,TreeNode pNode)
        public void AddTree(int ParentID,TreeNode pNode)  {
        { DataView dvTree = new DataView(dt_menu);
            DataView dvTree = new DataView(dt_menu); dvTree.RowFilter =  "[ParentID] = " + ParentID;
            dvTree.RowFilter =  "[ParentID] = " + ParentID; foreach(DataRowView Row in dvTree)
            foreach(DataRowView Row in dvTree)  {
            { TreeNode Node=new TreeNode() ;
                TreeNode Node=new TreeNode() ;
 TreeNode node_temp=new TreeNode();
                TreeNode node_temp=new TreeNode();
 if(pNode == null)
                if(pNode == null)  {
                { //增加根节点
                    //增加根节点 node_temp.Text =Row["RightName"].ToString();
                    node_temp.Text =Row["RightName"].ToString(); node_temp.Tag =Row["ID"].ToString();
                    node_temp.Tag =Row["ID"].ToString(); treeView1.Nodes.Add(node_temp);
                    treeView1.Nodes.Add(node_temp); AddTree(Int32.Parse(Row["ID"].ToString()),node_temp);    //再次递归
                    AddTree(Int32.Parse(Row["ID"].ToString()),node_temp);    //再次递归 }
                } else
                else {
                { node_temp.Text =Row["RightName"].ToString();
                    node_temp.Text =Row["RightName"].ToString(); node_temp.Tag =Row["ID"].ToString();
                    node_temp.Tag =Row["ID"].ToString(); pNode.Nodes.Add(node_temp);
                    pNode.Nodes.Add(node_temp); AddTree(Int32.Parse(Row["ID"].ToString()),node_temp);    //再次递归
                    AddTree(Int32.Parse(Row["ID"].ToString()),node_temp);    //再次递归 }
                } }
            }             }
        }在TreeView的AfterCheck事件里面编写如下代码:
 private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
    private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e) {
        { //单击了treeView控件所触发的事件
            //单击了treeView控件所触发的事件 //MessageBox.Show(e.Node.Index.ToString());
            //MessageBox.Show(e.Node.Index.ToString()); //如果夫节点下面有子节点则全部选中
            //如果夫节点下面有子节点则全部选中 if(e.Action != TreeViewAction.Unknown)
            if(e.Action != TreeViewAction.Unknown) {
            { if(e.Node.Nodes.Count > 0)
                if(e.Node.Nodes.Count > 0) {
                { this.CheckAllChildNodes(e.Node, e.Node.Checked);
                    this.CheckAllChildNodes(e.Node, e.Node.Checked); }
                } //如果选中子节点同时选中父节点
                //如果选中子节点同时选中父节点 if(e.Node.Checked == true)
                if(e.Node.Checked == true) {
                { this.selectParent(e.Node);
                    this.selectParent(e.Node); }
                } //如果取消子选择子节点,而且当所有本及子节点未选中时,取消父级节点
                //如果取消子选择子节点,而且当所有本及子节点未选中时,取消父级节点 if(e.Node.Checked == false)
                if(e.Node.Checked == false) {
                { this.cancelParent(e.Node);
                    this.cancelParent(e.Node); 
                 }
                } }
            }                 }
        }使用到的方法:
 public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
    public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked) {
        { foreach(TreeNode node in treeNode.Nodes)
            foreach(TreeNode node in treeNode.Nodes) {
            { node.Checked = nodeChecked;
                node.Checked = nodeChecked; if(node.Nodes.Count > 0)
                if(node.Nodes.Count > 0) {
                { this.CheckAllChildNodes(node, nodeChecked);
                    this.CheckAllChildNodes(node, nodeChecked); }
                } }
            } }
        }
 //取消上级节点
        //取消上级节点 private void cancelParent(TreeNode node)
        private void cancelParent(TreeNode node) {
        { if(node.Parent != null)
            if(node.Parent != null) {
            { bool isCheck = false;
                bool isCheck = false; foreach(TreeNode n in node.Parent.Nodes)
                foreach(TreeNode n in node.Parent.Nodes) {
                { if(n.Checked == true)
                    if(n.Checked == true) isCheck = true;
                        isCheck = true; }
                } if(!isCheck)
                if(!isCheck) node.Parent.Checked = false;
                    node.Parent.Checked = false; }
            } }
        } 
         //设置选中父节点
        //设置选中父节点 private void selectParent(TreeNode node)
        private void selectParent(TreeNode node) {
        { if(node.Parent != null && node.Parent.Checked == false)
            if(node.Parent != null && node.Parent.Checked == false) {
            { node.Parent.Checked = true;
                node.Parent.Checked = true; if(node.Parent.Parent != null)
                if(node.Parent.Parent != null) this.selectParent(node.Parent);
                    this.selectParent(node.Parent); }
            } }
        }取消TreeView里面所有的钩
 private void simpleButton4_Click(object sender, System.EventArgs e)
    private void simpleButton4_Click(object sender, System.EventArgs e) {
        { System.Windows.Forms.TreeNodeCollection nodes=treeView1.Nodes;
            System.Windows.Forms.TreeNodeCollection nodes=treeView1.Nodes; ClearSelectTree(nodes);
            ClearSelectTree(nodes); }    //清除所有打勾选项
        }    //清除所有打勾选项 private void ClearSelectTree(System.Windows.Forms.TreeNodeCollection nodes)
        private void ClearSelectTree(System.Windows.Forms.TreeNodeCollection nodes) {
        {             foreach(System.Windows.Forms.TreeNode node in nodes)
            foreach(System.Windows.Forms.TreeNode node in nodes)  {
            {   node.Checked =false;
                node.Checked =false;                 ClearSelectTree(node.Nodes); //递归查找
                ClearSelectTree(node.Nodes); //递归查找                  }
            }  }
        }给每个TreeView里面节点的Tag加str_right 这里str_right是全局变量
 GetAllNode(treeView1.Nodes);
            GetAllNode(treeView1.Nodes); /// <summary>
    /// <summary> /// 遍历treeview  调用GetAllNode(treeView1.Nodes)
        /// 遍历treeview  调用GetAllNode(treeView1.Nodes) /// </summary>
        /// </summary> /// <param name="nodes"></param>
        /// <param name="nodes"></param> private void GetAllNode(System.Windows.Forms.TreeNodeCollection nodes)
        private void GetAllNode(System.Windows.Forms.TreeNodeCollection nodes)  {
        {  foreach(System.Windows.Forms.TreeNode node in nodes)
            foreach(System.Windows.Forms.TreeNode node in nodes)  {
            {   if (node.Checked)
                if (node.Checked) {
                { if (str_right!="")
                    if (str_right!="") {
                    { str_right+=";"+node.Tag.ToString();
                        str_right+=";"+node.Tag.ToString(); }
                    } else
                    else {
                    { str_right=node.Tag.ToString();
                        str_right=node.Tag.ToString(); }
                    }                     }
                } GetAllNode(node.Nodes); //递归查找
                GetAllNode(node.Nodes); //递归查找  
                 }
            }  }
        } 下面判断是否打钩
 treeView1.Nodes[Convert.ToInt32(ch_array[0].ToString())-1].Nodes[Convert.ToInt32(ch_array[1].ToString())-1].Checked=true;
treeView1.Nodes[Convert.ToInt32(ch_array[0].ToString())-1].Nodes[Convert.ToInt32(ch_array[1].ToString())-1].Checked=true; 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号