TreeView的动态邦定的实现

简单分析一下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

这样就实现了根据数据库中的内容动态分级加载树节点

Published At
Categories with Web编程
Tagged with
comments powered by Disqus