实例分析VB.NET Treeview结构

开发 后端
这里介绍VB.NET Treeview结构,Treeview是由节点TreeNode组成的,第一级的称之为根节点TreeRoot,在根节点之下一级的称之为某个根节点的子节点TreeLeaf,某个子节点之下一级的子节点就称为该子节点的子节点。

本人很喜欢VB.NET,在工作中也很喜欢总结关于VB.NET Treeview结构的经验教训,我们简单分析一下VB.NET Treeview结构(笔者准备在另文专门剖析一下VB.NET Treeview结构,以方便有兴趣的网友进行高级应用)

Treeview是由节点TreeNode组成的,第一级的称之为根节点TreeRoot,在根节点之下一级的称之为某个根节点的子节点TreeLeaf,某个子节点之下一级的子节点就称为该子节点的子节点。第个节点有两个标识方式,一个是它的Text,即显示出来的内容;另一个是它的Tag属性,一般用唯一标识码对其进行标识,以用于在使用时对节点的识别。在本文中,也主要用Text属性来显示节点的名称字段,用Tag属性来显示节点的编号属性。(节点编号被设为主键,也就是唯一的标识了)

1.加载根节点
好了,我们该开始在VB.NET中进行演练了!第一步,当然是看看怎么在窗体起始的时候加载根节点:

  1. '定义公用变量  
  2. Dim myconnection As New OleDb.OleDbConnection()  
  3. Dim MyAdapater As New OleDb.OleDbDataAdapter()  
  4. Dim mycommand As New OleDb.OleDbCommand()  
  5. Dim ds As New DataSet()  
  6.  
  7. Private Sub Form1_Load(ByVal sender As System.Object, 
    ByVal e As System.EventArgs) Handles MyBase.Load  
  8. '载入根节点表至treeview中,作为第一级  
  9. myconnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
  10. Data Source=" & Application.StartupPath & "\project.mdb"   
  11. '数据库连接请自行更换  
  12. mycommand.CommandText = "SELECT 根节点编号,根节点名称 FROM 根节点" 
  13. mycommand.Connection = myconnection 
  14. Try  
  15. myconnection.Close()  
  16. myconnection.Open()  
  17. Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader  
  18. TreeView1.Nodes.Clear()  
  19. While mysqlreader.Read()  
  20. Dim tree_root As New TreeNode()  
  21. tree_root.Tag = mysqlreader.GetString(0) 
  22. '把编号放入tag中  
  23. tree_root.Text = mysqlreader.GetString(1) 
  24. '树上显示的是根节点名称  
  25. '请根据你数据库字段的类型来决定是否用getstring或其它类型  
  26. TreeView1.Nodes.Add(tree_root)  
  27. End While  
  28. Catch ex As Exception  
  29. MessageBox.Show(ex.ToString, "数据表根节点载入错误", vbOKOnly)  
  30. Finally  
  31. myconnection.Close()  
  32. End Try  
  33. TreeView1.ExpandAll()  
  34. TreeView1.Select()  
  35. End Sub 

2.点击时加入子节点
对TreeView的点击,对于TreeView控件本身,并没有为哪一个级别的Node编写点击(选择)事件处理程序,而是把所有节点的点击事件都写入了一个AfterSelect事件中。因此,在编写点击加入子节点的程序之前,我们还必须编写一个查找点击的节点是哪一级节点的方法。

  1. Public Function NodeLevel(ByVal n As TreeNode) As Byte  
  2. '* 找出树中当前节点的级数  
  3. Dim i As Byte = 1 
  4. Dim m As String  
  5. Do Until n.Parent Is Nothing  
  6. nn = n.Parent  
  7. i += 1  
  8. Loop  
  9. Return i  
  10. End Function 

通过这个函数,就可以很方便地得到节点的级别。现在我们可以放心地编写节点选择事件处理程序,以实现动态加载各级节点的子节点。

  1. Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, 
    ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect  
  2. Select Case NodeLevel(e.Node).ToString  
  3. Case "1"  
  4. If e.Node.GetNodeCount(False) = 0 Then  
  5. mycommand.CommandText = "select 第一级子节点编号,第一级子节点名称 
    from 第一级子节点 where 根节点编号 ='"
     & e.Node.Tag & "'"  
  6. fill_treeleaf()  
  7. End If  
  8. Case "2"  
  9. If e.Node.GetNodeCount(False) = 0 Then  
  10. mycommand.CommandText = "select 第二级子节点编号,第二级子节点名称 
    from 第二级子节点 where 第一级子节点编号 ='"
     & e.Node.Tag & "'"  
  11. fill_treeleaf()  
  12. End If  
  13. End Select  
  14. End Sub  
  15. Public Sub fill_treeleaf()  
  16. mycommand.Connection = myconnection 
  17. Try  
  18. myconnection.Open()  
  19. Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader  
  20. While mysqlreader.Read()  
  21. Dim tree_leaf As New TreeNode()  
  22. tree_leaf.Tag = mysqlreader.GetString(0)  
  23. tree_leaf.Text = mysqlreader.GetString(1)  
  24. TreeView1.SelectedNode.Nodes.Add(tree_leaf)  
  25. End While  
  26. Catch ex As Exception  
  27. MsgBox(ex.Message)  
  28. Finally  
  29. myconnection.Close()  
  30. End Try  
  31. End Sub 

【编辑推荐】

  1. 详细分析VB.NET WithEvents
  2. 浅析VB.NET局部静态变量
  3. 原理分析VB.NET开发控件
  4. 自己动手用代码实现VB.NET ListView加载数据
  5. 详细介绍VB.NET MyClass
责任编辑:佚名 来源: 新浪博客
相关推荐

2009-10-13 15:09:19

VB.NET使用Tre

2009-11-10 17:31:38

VB.NET注册表

2009-11-02 17:12:01

VB和VB.NET

2009-10-28 14:13:32

VB.NET File

2010-01-19 18:24:29

VB.NET调用Win

2009-10-28 10:04:53

VB.NET XmlW

2010-01-22 10:41:33

VB.NET声明结构

2009-10-21 09:10:52

VB.NET压缩

2009-10-27 08:56:22

VB.NET文件夹

2009-11-04 11:32:20

VB.NET回调函数

2009-10-26 16:53:00

VB.NET常用代码

2009-10-21 09:40:23

VB.NET搜索

2009-10-22 09:20:46

VB.NET Proc

2009-10-09 17:40:38

VB.Net问题集

2009-11-02 15:57:36

VB.NET WEB

2010-01-15 15:39:14

VB.NET Sub过

2010-01-12 17:54:42

VB.NET Dlli

2009-10-29 15:16:02

VB.NET文件传送

2009-10-13 09:24:57

VB.NET Dock

2009-10-14 15:20:21

VB.NET窗体指针
点赞
收藏

51CTO技术栈公众号