最近,使用到了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