實例分析VB.NET Treeview結構
本人很喜歡VB.NET,在工作中也很喜歡總結關于VB.NET Treeview結構的經(jīng)驗教訓,我們簡單分析一下VB.NET Treeview結構(筆者準備在另文專門剖析一下VB.NET Treeview結構,以方便有興趣的網(wǎng)友進行高級應用)
Treeview是由節(jié)點TreeNode組成的,第一級的稱之為根節(jié)點TreeRoot,在根節(jié)點之下一級的稱之為某個根節(jié)點的子節(jié)點TreeLeaf,某個子節(jié)點之下一級的子節(jié)點就稱為該子節(jié)點的子節(jié)點。第個節(jié)點有兩個標識方式,一個是它的Text,即顯示出來的內(nèi)容;另一個是它的Tag屬性,一般用唯一標識碼對其進行標識,以用于在使用時對節(jié)點的識別。在本文中,也主要用Text屬性來顯示節(jié)點的名稱字段,用Tag屬性來顯示節(jié)點的編號屬性。(節(jié)點編號被設為主鍵,也就是唯一的標識了)
1.加載根節(jié)點
好了,我們該開始在VB.NET中進行演練了!第一步,當然是看看怎么在窗體起始的時候加載根節(jié)點:
- '定義公用變量
- Dim myconnection As New OleDb.OleDbConnection()
- Dim MyAdapater As New OleDb.OleDbDataAdapter()
- Dim mycommand As New OleDb.OleDbCommand()
- Dim ds As New DataSet()
- Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles MyBase.Load- '載入根節(jié)點表至treeview中,作為第一級
- myconnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;
- Data Source=" & Application.StartupPath & "\project.mdb"
- '數(shù)據(jù)庫連接請自行更換
- mycommand.CommandText = "SELECT 根節(jié)點編號,根節(jié)點名稱 FROM 根節(jié)點"
- mycommand.Connection = myconnection
- Try
- myconnection.Close()
- myconnection.Open()
- Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader
- TreeView1.Nodes.Clear()
- While mysqlreader.Read()
- Dim tree_root As New TreeNode()
- tree_root.Tag = mysqlreader.GetString(0)
- '把編號放入tag中
- tree_root.Text = mysqlreader.GetString(1)
- '樹上顯示的是根節(jié)點名稱
- '請根據(jù)你數(shù)據(jù)庫字段的類型來決定是否用getstring或其它類型
- TreeView1.Nodes.Add(tree_root)
- End While
- Catch ex As Exception
- MessageBox.Show(ex.ToString, "數(shù)據(jù)表根節(jié)點載入錯誤", vbOKOnly)
- Finally
- myconnection.Close()
- End Try
- TreeView1.ExpandAll()
- TreeView1.Select()
- End Sub
2.點擊時加入子節(jié)點
對TreeView的點擊,對于TreeView控件本身,并沒有為哪一個級別的Node編寫點擊(選擇)事件處理程序,而是把所有節(jié)點的點擊事件都寫入了一個AfterSelect事件中。因此,在編寫點擊加入子節(jié)點的程序之前,我們還必須編寫一個查找點擊的節(jié)點是哪一級節(jié)點的方法。
- Public Function NodeLevel(ByVal n As TreeNode) As Byte
- '* 找出樹中當前節(jié)點的級數(shù)
- Dim i As Byte = 1
- Dim m As String
- Do Until n.Parent Is Nothing
- nn = n.Parent
- i += 1
- Loop
- Return i
- End Function
通過這個函數(shù),就可以很方便地得到節(jié)點的級別。現(xiàn)在我們可以放心地編寫節(jié)點選擇事件處理程序,以實現(xiàn)動態(tài)加載各級節(jié)點的子節(jié)點。
- Private Sub TreeView1_AfterSelect(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect- Select Case NodeLevel(e.Node).ToString
- Case "1"
- If e.Node.GetNodeCount(False) = 0 Then
- mycommand.CommandText = "select 第一級子節(jié)點編號,第一級子節(jié)點名稱
from 第一級子節(jié)點 where 根節(jié)點編號 ='" & e.Node.Tag & "'"- fill_treeleaf()
- End If
- Case "2"
- If e.Node.GetNodeCount(False) = 0 Then
- mycommand.CommandText = "select 第二級子節(jié)點編號,第二級子節(jié)點名稱
from 第二級子節(jié)點 where 第一級子節(jié)點編號 ='" & e.Node.Tag & "'"- fill_treeleaf()
- End If
- End Select
- End Sub
- Public Sub fill_treeleaf()
- mycommand.Connection = myconnection
- Try
- myconnection.Open()
- Dim mysqlreader As OleDb.OleDbDataReader = mycommand.ExecuteReader
- While mysqlreader.Read()
- Dim tree_leaf As New TreeNode()
- tree_leaf.Tag = mysqlreader.GetString(0)
- tree_leaf.Text = mysqlreader.GetString(1)
- TreeView1.SelectedNode.Nodes.Add(tree_leaf)
- End While
- Catch ex As Exception
- MsgBox(ex.Message)
- Finally
- myconnection.Close()
- End Try
- End Sub
【編輯推薦】