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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM