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;
                
#region 增加权限数据表
                
#region    资源管理
                dr
=dt_menu.NewRow();            
                dr[
"ID"]="1";
                dr[
"RightName"]="资源管理";
                dr[
"ParentID"]="0";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="11";
                dr[
"RightName"]="查询";
                dr[
"ParentID"]="1";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="12";
                dr[
"RightName"]="增加";
                dr[
"ParentID"]="1";
                dt_menu.Rows.Add(dr);


                dr
=dt_menu.NewRow();            
                dr[
"ID"]="13";
                dr[
"RightName"]="修改";
                dr[
"ParentID"]="1";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="14";
                dr[
"RightName"]="删除";
                dr[
"ParentID"]="1";
                dt_menu.Rows.Add(dr);
                
#endregion

                
#region    资源中心
                dr
=dt_menu.NewRow();            
                dr[
"ID"]="2";
                dr[
"RightName"]="资源中心";
                dr[
"ParentID"]="0";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="21";
                dr[
"RightName"]="查询";
                dr[
"ParentID"]="2";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="22";
                dr[
"RightName"]="增加";
                dr[
"ParentID"]="2";
                dt_menu.Rows.Add(dr);

                
#endregion
            
                
#region 决策支持
                dr
=dt_menu.NewRow();            
                dr[
"ID"]="3";
                dr[
"RightName"]="决策支持";
                dr[
"ParentID"]="0";
                dt_menu.Rows.Add(dr);
                
地图导航

                
数据报表


                
#endregion

                
#region  工作信息
                dr
=dt_menu.NewRow();            
                dr[
"ID"]="4";
                dr[
"RightName"]="工作信息";
                dr[
"ParentID"]="0";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="41";
                dr[
"RightName"]="查询";
                dr[
"ParentID"]="4";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="42";
                dr[
"RightName"]="增加";
                dr[
"ParentID"]="4";
                dt_menu.Rows.Add(dr);


                dr
=dt_menu.NewRow();            
                dr[
"ID"]="43";
                dr[
"RightName"]="修改";
                dr[
"ParentID"]="4";
                dt_menu.Rows.Add(dr);


                dr
=dt_menu.NewRow();            
                dr[
"ID"]="44";
                dr[
"RightName"]="删除";
                dr[
"ParentID"]="4";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="45";
                dr[
"RightName"]="摸板维护";
                dr[
"ParentID"]="4";
                dt_menu.Rows.Add(dr);



                
#endregion

                
#region    工作计划
                dr
=dt_menu.NewRow();            
                dr[
"ID"]="5";
                dr[
"RightName"]="工作计划";
                dr[
"ParentID"]="0";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="51";
                dr[
"RightName"]="查询";
                dr[
"ParentID"]="5";
                dt_menu.Rows.Add(dr);

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="52";
                dr[
"RightName"]="删除";
                dr[
"ParentID"]="5";
                dt_menu.Rows.Add(dr);
                
#endregion

                
工作动态
                
科研项目
                
文保档案
                
#region 系统管理
                dr
=dt_menu.NewRow();            
                dr[
"ID"]="9";
                dr[
"RightName"]="系统管理";
                dr[
"ParentID"]="0";
                dt_menu.Rows.Add(dr);    
            
                dr
=dt_menu.NewRow();            
                dr[
"ID"]="91";
                dr[
"RightName"]="查看";
                dr[
"ParentID"]="9";
                dt_menu.Rows.Add(dr);    

                dr
=dt_menu.NewRow();            
                dr[
"ID"]="92";
                dr[
"RightName"]="编辑";
                dr[
"ParentID"]="9";
                dt_menu.Rows.Add(dr);    
                
#endregion

                
#endregion

                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 ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值