C# 关于treeview的绑定和右键菜单添加删除子节点

最近,使用到了winform的treeview控件,在网上看了好多关于treeview控件使用方法的介绍都不全面。于是我这个菜鸟进行了写了点东西出来,还请高手不要见笑。自此也就当作是自己学习的一种反省和记录吧,另外朋友们要是不嫌弃的话可以拿去用。闲话少说,上代码:

 一 、treeview 控件绑定数据库的操作

      关于数据库的绑定,参考了网上高手们写的demo,别笑话我,哈哈。

    代码

  

 1   public void AddTree(int ParentID, TreeNode pNode, TreeView productTypeTree)
 2 
 3               {         
 4 
 5                        string sql = "select category_sn, category_name, parent_sn from st_product_category";      
 6 
 7                           DataTable dt = DBHelper.ta(sql, 1);           
 8 
 9                         TreeNode tn1 = new TreeNode();         
10 
11                           DataView dvTree = new DataView(dt);       
12 
13                          //过滤ParentID,得到当前的所有子节点       
14 
15                       dvTree.RowFilter = "[parent_sn] = " + ParentID;           
16 
17                    foreach (DataRowView Row in dvTree)      
18 
19                   {           
20 
21                       if (pNode == null)        
22 
23                        {    //添加根节点
24 
25                           tn1.Text = Row["category_name"].ToString();      
26 
27                           productTypeTree.Nodes.Add(tn1);         
28 
29                           tn1.ExpandAll();                   
30 
31                           AddTree(Int32.Parse(Row["category_sn"].ToString()), tn1, productTypeTree);    //再次递归    
32 
33                        }        
34 
35                     else    
36 
37                       {   //添加当前节点的子节点     
38 
39                          TreeNode tn2 = new TreeNode();  
40 
41                          tn2.Text = Row["category_name"].ToString();      
42 
43                          pNode.Nodes.Add(tn2);            
44 
45                          tn1.ExpandAll();          
46 
47                          AddTree(Int32.Parse(Row["category_sn"].ToString()), tn2, productTypeTree);    //再次递归
48 
49                         }          
50 
51                     }        
52 
53                    productTypeTree.ExpandAll();   
54 
55              }

 

     二、  在为treeview 控件添加右键菜单 (添加节点,删除节点)

               在treeview的节点点击事件中添加右键菜单  (TreeView1_NodeMouseClick)   

             

                     private void TreeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)

                    {        

                               if (e.Button != MouseButtons.Right) return;  

                               if (e.Node.Level == 0) return;        

                                TreeNode currentNode = this.productTypeTree.GetNodeAt(new Point(e.X, e.Y));    

                               ContextMenuStrip cms = new ContextMenuStrip();      

                               if (currentNode != null)   

                                   { 

                                        ToolStripMenuItem editAddproduct = new ToolStripMenuItem("添加兄弟节点");  

                                        ToolStripMenuItem editAddprChildoduct = new ToolStripMenuItem("添加子节点"); 

                                        ToolStripMenuItem editDeleteproduct = new ToolStripMenuItem("删除节点");      

                                        editAddproduct.Click += new EventHandler(editAddproduct_Click);         

                                        editAddprChildoduct.Click += new EventHandler(editAddChildProduct_Click);       

                                        editDeleteproduct.Click += new EventHandler(editDeleteproduct_Click);          

                                        cms.Items.Add(editAddproduct);    

                                        cms.Items.Add(editAddprChildoduct);   

                                        cms.Items.Add(editDeleteproduct);   

                                        cms.Show(this.productTypeTree, e.X, e.Y);   

                                        this.productTypeTree.SelectedNode = currentNode;   

                                    }

                      }

 

三 实现右键菜单的点击事件

 1             添加子节点
 2 
 3            void editAddChildProduct_Click(object sender, EventArgs e)
 4         {
 5             TreeNode tn = this.productTypeTree.SelectedNode;
 6             AddChildNode(tn, "新节点");
 7             this.productTypeTree.ExpandAll();
 8         }       
 9         //删除节点
10         void editDeleteproduct_Click(object sender, EventArgs e)
11         {
12             TreeNode treenode = this.productTypeTree.SelectedNode;
13             this.DeleteNode(treenode);
14             this.productTypeTree.ExpandAll();
15         }
16         //  添加兄弟节点
17         void editAddproduct_Click(object sender, EventArgs e)
18         {           
19             TreeNode tn = this.productTypeTree.SelectedNode;
20             AddtreeNode(tn, "新节点");
21             this.productTypeTree.ExpandAll();
22         }       
23 
24          //添加兄弟节点
25         private void AddtreeNode(TreeNode Node, string NewNodeName)
26         {
27             TreeNode parentNode = Node.Parent;
28             TreeNode newNode = new TreeNode(); newNode.Text = NewNodeName;           
29             if (parentNode != null)
30             {
31                 if (!parentNode.Nodes.Contains(newNode))
32                 {
33                     parentNode.Nodes.Add(newNode);
34                 }
35                 else return;                
36             }
37         }
38         //添加子节点
39         private void AddChildNode(TreeNode tn, string NewChileName)
40         {
41             TreeNode newChildNode = new TreeNode();
42             newChildNode.Text = NewChileName;
43             tn.Nodes.Add(newChildNode);
44         }
45 
46          //删除节点
47         private void DeleteNode(TreeNode treenode)
48         {
49             if (treenode.Nodes.Count==0)   //如果该节点下没有子节点直接删除
50             {
51                 this.productTypeTree.Nodes.Remove(treenode);
52             }
53             else if (treenode.Nodes.Count>0)//该节点下有节点 提示是否全部删除该节点的所有内容
54             {
55                 if ((MessageBox.Show("是否删除该项目下的所有子项?","警告",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning))==DialogResult.OK)
56                 {
57                     this.productTypeTree.Nodes.Remove(treenode);
58                 }
59             }
60         }

            

多余的解释我就不写了,详细大家都能够看得懂。也没有什么好的算法,还望高手指点迷津。
 

    2013-06-11

 

 

 


<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值