16,553
社区成员
发帖
与我相关
我的任务
分享
Private Sub AddSubNodes(ByVal thisNode As TreeNode, ByVal thisRow As DataRow, ByVal dtRWList As DataTable)
...
thisNode.Nodes.Add(tree_leaf)
...
'---- 递归过程 ----'
Private Sub AddSubNodes(ByVal thisNode As TreeNode, ByVal thisRow As DataRow, ByVal dtRWList As DataTable)
Dim myRWWID As Integer = thisRow("RWWID")
If myRWWID = 0 Then Exit Sub '没有下级标志'
Dim myRWSID As Integer = thisRow("RWID")
Dim rows() As DataRow = dtRWList.Select("RWSID ='" & myRWSID & "' ")
For Each row As DataRow In rows
Dim tree_leaf As New TreeNode()
tree_leaf.Text = row("RWID") & ")" & row("RWtitle") & "(时限:" & row("RWEndID") & " 下达人:" & row("Rwforman") & " 实施人:" & row("Rwtoman") & ")"
TreeView1.Nodes.Add(tree_leaf)
AddSubNodes(tree_leaf, row, dtRWList)
Next
End Sub
'---- 主体部分 ----'
Try
TreeView1.Nodes.Clear()
SQLSEConn0.Open()
'能加载到TreeView的数据量不会多,一次性全取。'
'还有你把用到的字段自己列一下,代替 *'
Dim sqlRWList As String = "SELECT * FROM TD_RWList WHERE " & myrwall & " order by RWID"
Dim da As New OleDbDataAdapter(sqlRWList, SQLSEConn0)
Dim dtRWList As New DataTable()
da.Fill(dtRWList)
dep0SQL = "SELECT RWGname FROM TD_RWGRE WHERE RWPname = '" & loadMAN & "'" '根据登陆人找出项目组'
dep0com = New OleDbCommand(dep0SQL, SQLSEConn0)
dep0dr = dep0com.ExecuteReader()
While dep0dr.Read()
'找到项目组后,按项目组把主任务理出来'
Dim rows() As DataRow = dtRWList.Select("RWSID=0 and RwtoDep='" & dep0dr.Item("RWGname"))
For Each row As DataRow In rows
Dim tree_root As New TreeNode()
tree_root.Text = row("RWID") & ")" & row("RWtitle") '树上显示的是根节点名称'
TreeView1.Nodes.Add(tree_root)
AddSubNodes(tree_root, row, dtRWList)
Next
End While
Catch ex As Exception
MsgBox(ex.ToString)
Finally
SQLSEConn0.Close()
End Try
TreeView1.ExpandAll()
TreeView1.Select()
Friend Sub initTreeView()
TreeView.Nodes.Clear()
For Each row As DataRow In DataTable.Rows ‘DataTable就是经过筛选的数据,只有四个字段,分别是ID,CODE,NAME,ParentID,或只有三个字段ID,NAME,ParentID’,这个排序很重要,越顶级的越靠前,否则会漏掉树节点
Dim trNode As New TreeNode
trNode.Tag = row(0)
If DataTable.Columns.Count = 4 Then
trNode.Text = "[" & row(3) & "] " & row(1)
Else
trNode.Text = row(1)
End If
If Not IsDBNull(row(2)) Then
trNode.StateImageKey = row(2)
Else
trNode.StateImageKey = 0
End If
If trNode.StateImageKey = 0 Then
TreeView.Nodes.Add(trNode)
Else
For Each node As TreeNode In TreeView.Nodes
If addAChild(node, trNode) Then
Exit For
End If
Next
End If
Next
If TreeView.Nodes.Count > 0 Then
TreeView.Nodes(0).Expand()
End If
End Sub
Private Function addAChild(ByVal TrNode As TreeNode, ByVal SubNode As TreeNode) As Boolean
If TrNode.Tag = SubNode.StateImageKey Then
TrNode.Nodes.Add(SubNode)
Return True
Else
For Each node As TreeNode In TrNode.Nodes
addAChild(node, SubNode)
Next
End If
End Function
在数据库中有一个存储过程,用来根据传入的ID,和表名在相关的表中获取层次数据