TreeView 操作应用

1 在窗体Form_Load里面初始化TreeView
    
/**//// <summary>
        
/// 初始化TreeView
        
/// </summary>

        private void InitTreeview()
        
{
            
try
            
{
                treeView1.CheckBoxes 
= true;
                treeView1.Nodes.Clear();
                dt_menu
=new DataTable("dt_rightTable");                
                dt_menu.Columns.Add(
"ID"typeof(String));
                dt_menu.Columns.Add(
"RightName"typeof(String));
                dt_menu.Columns.Add(
"ParentID"typeof(String));    

                DataRow dr;
                增加权限数据表
增加权限数据表
                AddTree(
0, (TreeNode)null);
                             
            }

            
catch (Exception exc)
            
{
                MessageBox.Show(exc.Message);
            }

        }

其中用到方法:
    
/**//// <summary>
        
///  递归添加树的节点
        
/// </summary>
        
/// <param name="ParentID">父节点ID</param>
        
/// <param name="pNode">节点</param>

        public void AddTree(int ParentID,TreeNode pNode) 
        
{
            DataView dvTree 
= new DataView(dt_menu);
            dvTree.RowFilter 
=  "[ParentID] = " + ParentID;
            
foreach(DataRowView Row in dvTree) 
            
{
                TreeNode Node
=new TreeNode() ;

                TreeNode node_temp
=new TreeNode();

                
if(pNode == null
                
{
                    
//增加根节点
                    node_temp.Text =Row["RightName"].ToString();
                    node_temp.Tag 
=Row["ID"].ToString();
                    treeView1.Nodes.Add(node_temp);
                    AddTree(Int32.Parse(Row[
"ID"].ToString()),node_temp);    //再次递归
                }

                
else
                
{
                    node_temp.Text 
=Row["RightName"].ToString();
                    node_temp.Tag 
=Row["ID"].ToString();
                    pNode.Nodes.Add(node_temp);
                    AddTree(Int32.Parse(Row[
"ID"].ToString()),node_temp);    //再次递归
                }

            }
            
        }


在TreeView的AfterCheck事件里面编写如下代码:
    
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
        
{
            
//单击了treeView控件所触发的事件
            
//MessageBox.Show(e.Node.Index.ToString());
            
//如果夫节点下面有子节点则全部选中
            if(e.Action != TreeViewAction.Unknown)
            
{
                
if(e.Node.Nodes.Count > 0)
                
{
                    
this.CheckAllChildNodes(e.Node, e.Node.Checked);
                }

                
//如果选中子节点同时选中父节点
                if(e.Node.Checked == true)
                
{
                    
this.selectParent(e.Node);
                }

                
//如果取消子选择子节点,而且当所有本及子节点未选中时,取消父级节点
                if(e.Node.Checked == false)
                
{
                    
this.cancelParent(e.Node);
                
                }

            }
                
        }


使用到的方法:
    
public void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
        
{
            
foreach(TreeNode node in treeNode.Nodes)
            
{
                node.Checked 
= nodeChecked;
                
if(node.Nodes.Count > 0)
                
{
                    
this.CheckAllChildNodes(node, nodeChecked);
                }

            }

        }


        
//取消上级节点
        private void cancelParent(TreeNode node)
        
{
            
if(node.Parent != null)
            
{
                
bool isCheck = false;
                
foreach(TreeNode n in node.Parent.Nodes)
                
{
                    
if(n.Checked == true)
                        isCheck 
= true;
                }

                
if(!isCheck)
                    node.Parent.Checked 
= false;
            }

        }

        
        
//设置选中父节点
        private void selectParent(TreeNode node)
        
{
            
if(node.Parent != null && node.Parent.Checked == false)
            
{
                node.Parent.Checked 
= true;
                
if(node.Parent.Parent != null)
                    
this.selectParent(node.Parent);
            }

        }

取消TreeView里面所有的钩
    
private void simpleButton4_Click(object sender, System.EventArgs e)
        
{
            System.Windows.Forms.TreeNodeCollection nodes
=treeView1.Nodes;
            ClearSelectTree(nodes);
        }
    //清除所有打勾选项
        private void ClearSelectTree(System.Windows.Forms.TreeNodeCollection nodes)
        
{            
            
foreach(System.Windows.Forms.TreeNode node in nodes) 
            
{  
                node.Checked 
=false;                
                ClearSelectTree(node.Nodes); 
//递归查找                 
            }
 
        }

给每个TreeView里面节点的Tag加str_right  这里str_right是全局变量
            GetAllNode(treeView1.Nodes);遍历所有的节点:
    
/**//// <summary>
        
/// 遍历treeview  调用GetAllNode(treeView1.Nodes)
        
/// </summary>
        
/// <param name="nodes"></param>

        private void GetAllNode(System.Windows.Forms.TreeNodeCollection nodes) 
        

            
foreach(System.Windows.Forms.TreeNode node in nodes) 
            
{  
                
if (node.Checked)
                
{
                    
if (str_right!="")
                    
{
                        str_right
+=";"+node.Tag.ToString();
                    }

                    
else
                    
{
                        str_right
=node.Tag.ToString();
                    }
                    
                }

                GetAllNode(node.Nodes); 
//递归查找 
                
            }
 
        }
 
下面判断是否打钩
treeView1.Nodes[Convert.ToInt32(ch_array[
0].ToString())-1].Nodes[Convert.ToInt32(ch_array[1].ToString())-1].Checked=true;

posted on 2006-12-18 17:29  玄新  阅读(252)  评论(0编辑  收藏  举报

导航