简单分析一下treeview的结构
Treeview是由节点TreeNode组成的,第一级的称之为根节点TreeRoot,在根节点之下一级的称之为某个根节点的子节点TreeLeaf,某个子节点之下一级的子节点就称为该子节点的子节点。第个节点有两个标识方式,一个是它的Text,即显示出来的内容;另一个是它的Tag属性,一般用唯一标识码对其进行标识,以用于在使用时对节点的识别。在本文中,也主要用Text属性来显示节点的名称字段,用Tag属性来显示节点的编号属性。(节点编号被设为主键,也就是唯一的标识了)
首先要将树型控件添加到Form窗体上,然后根据数据库中的信息来动态填充Treeview。
代码如下:
'加载树第一层
Public Function loadTree() As Integer
Dim tree_root As New TreeNode
tree_root.Tag = '0'
tree_root.Text = '管网'
TreeView1.Nodes.Add(tree_root)
End Function
Public Function NodeLevel(ByVal n As TreeNode) As Byte
'* 找出树中当前节点的级数
Dim i As Byte = 1
Dim m As String
Do Until n.Parent Is Nothing
n = n.Parent
i += 1
Loop
Return i
End Function
'处理点击了树的节点之后的事件的处理,动态加载树节点
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
Dim tree_root As New TreeNode
tree_root.Tag = '11'
tree_root.Text = '水线'
TreeView1.SelectedNode.Nodes.Add(tree_root)
Dim tree_root1 As New TreeNode
tree_root1.Tag = '12'
tree_root1.Text = '汽线'
TreeView1.SelectedNode.Nodes.Add(tree_root1)
'ryp = Me.ryl.GetObjByQry('')
'If (Not ryp Is Nothing) Then
' Dim ryplength As Integer = ryp.Length
' Dim m_i As Integer
' For m_i = 0 To ryplength - 1
' Dim tree_root As New TreeNode
' tree_root.Tag = ryp(m_i).get_ID_I
' tree_root.Text = ryp(m_i).get_GX_NAME_S
' TreeView1.SelectedNode.Nodes.Add(tree_root)
' Next
'End If
'MainFrom.ActiveForm.Activate()
End If
Case '2'
If e.Node.GetNodeCount(False) = 0 Then
ryp = Me.ryl.GetObjByQry('')
If (Not ryp Is Nothing) Then
Dim ryplength As Integer = ryp.Length
Dim m_i As Integer
For m_i = 0 To ryplength - 1
If ryp(m_i).get_GX_NET_S.Equals(TreeView1.SelectedNode.Text) Then
Dim tree_root As New TreeNode
tree_root.Tag = ryp(m_i).get_ID_I
tree_root.Text = ryp(m_i).get_GX_NAME_S
TreeView1.SelectedNode.Nodes.Add(tree_root)
End If
Next
End If
'TreeView1.Focus()
End If
Case '3'
If e.Node.GetNodeCount(False) = 0 Then
If TreeView1.SelectedNode.Parent.Text.Equals('汽线') Then
Dim tree_root As New TreeNode
tree_root.Tag = '31'
tree_root.Text = '汽水站'
TreeView1.SelectedNode.Nodes.Add(tree_root)
Dim tree_root1 As New TreeNode
tree_root1.Tag = '32'
tree_root1.Text = '汽用户'
TreeView1.SelectedNode.Nodes.Add(tree_root1)
Else
Dim m_str = ' where GX_REL_S=' + ''' + TreeView1.SelectedNode.Tag + '''
'MsgBox(m_str)
ssp = Me.ssl.GetObjByQry(m_str)
If (Not ssp Is Nothing) Then
Dim ssplength As Integer = ssp.Length
Dim m_i As Integer
For m_i = 0 To ssplength - 1
Dim tree_root As New TreeNode
tree_root.Tag = ssp(m_i).get_ID_I
tree_root.Text = ssp(m_i).get_STATION_NAME_S
TreeView1.SelectedNode.Nodes.Add(tree_root)
Next
End If
End If
End If
Case '4'
If e.Node.GetNodeCount(False) = 0 Then
Dim m_str = ' where GX_REL_S=' + ''' + TreeView1.SelectedNode.Parent.Tag + '''
If TreeView1.SelectedNode.Text.Equals('汽水站') Then
qsp = Me.qsl.GetObjByQry(m_str)
If (Not qsp Is Nothing) Then
Dim qsplength As Integer = qsp.Length
Dim m_i As Integer
For m_i = 0 To qsplength - 1
Dim tree_root As New TreeNode
tree_root.Tag = qsp(m_i).get_ID_I
tree_root.Text = qsp(m_i).get_STATION_NAME_S
TreeView1.SelectedNode.Nodes.Add(tree_root)
Next
End If
'End If
ElseIf TreeView1.SelectedNode.Text.Equals('汽用户') Then
yhp = Me.yhl.GetObjByQry(m_str)
If (Not yhp Is Nothing) Then
Dim yhplength As Integer = yhp.Length
Dim m_i As Integer
For m_i = 0 To yhplength - 1
Dim tree_root As New TreeNode
tree_root.Tag = yhp(m_i).get_ID_I
tree_root.Text = yhp(m_i).get_CUSTOMER_S
TreeView1.SelectedNode.Nodes.Add(tree_root)
Next
End If
' End If
Else
MsgBox('dao di la!')
'If myForm.SSWindowForm Is Nothing Then
' Dim sswindow As New WinForm.Main.SSWindow
' myForm.SSWindowForm = sswindow
' MsgBox('create sswindow')
'End If
'myForm.SSWindowForm.Show()
Dim sswindow As New WinForm.Main.SSWindow
myForm.MainForm = Me.ActiveForm
sswindow.SSStationID = TreeView1.SelectedNode.Tag
sswindow.ShowDialog()
End If
End If
Case '5'
If e.Node.GetNodeCount(False) = 0 Then
MsgBox('qi ya!')
End If
End Select
End Sub
这样就实现了根据数据库中的内容动态分级加载树节点