VB.net 递归Treeview 怎么获取第N层的结点

cxdcxd069030153 2015-07-07 02:32:22


有两张表 一张表A有NodeID ChildrenID OrderNum 另一张表B为NodeID type Name
A中childrenID 与B中NodeID 相对应 A中Nodeid为0代表根节点 一行中ChildrenID为8 名字在 B中 显示为散货船 A中第二行 NodeID为8 childrenID为9 即为第二级节点 名称为H2558 A中第三行 NodeID为9 childrenID为10 即为第三级节点 名称为尾部机舱区域 A中第四行 NodeID为10 childrenID为11 即为第四级节点 名称为10A A中第五行 NodeID为11 childrenID为12 即为第五级节点 名称为102
问题 对于这种递归的 结构树 我怎么获取第五级子节点 在定位到第五级子节点时 对子节点进行 添加属性 属性为102等的基本长宽高等基础数据 并且将第五级上面四级的名称 都能获取到
程序代码如下

结构树显示代码
Imports System.Data
Imports System.Data.SqlClient

Public Class 递归结构树
'绑定根节点
Sub BindRoot()
conn1.Close()
conn1.Open()
Dim strSQL As String
Dim adapter As SqlDataAdapter
Dim cmd As SqlCommandBuilder
Dim table As New DataTable()
Dim MaterialInf As New DataSet
strSQL = "SELECT * FROM F_ProductInfoNodeChildrenList "
adapter = New SqlDataAdapter(strSQL, conn1)
cmd = New SqlCommandBuilder(adapter)
Dim rows As DataRow()
adapter.Fill(MaterialInf, "F_ProductInfoNodeChildrenList")
table = MaterialInf.Tables(0)
rows = table.[Select]("NodeID= 0")
'取根
For Each dRow As DataRow In rows
Dim rootNode As New TreeNode()
rootNode.Tag = dRow
Dim strSQL1 As String
Dim adapter1 As SqlDataAdapter
Dim cmd1 As SqlCommandBuilder
Dim table1 As New DataTable()
Dim MaterialInf1 As New DataSet
strSQL1 = "SELECT * FROM F_ProductInfoNodeList where NodeID='" & dRow("ChildrenNodeID").ToString() & "'"
adapter1 = New SqlDataAdapter(strSQL1, conn1)
cmd1 = New SqlCommandBuilder(adapter1)
adapter1.Fill(MaterialInf1, "F_ProductInfoNodeList")
table1 = MaterialInf1.Tables(0)
rootNode.Text = table1.Rows(0).Item("Name").ToString()
TreeView1.Nodes.Add(rootNode)
If table1.Rows(0).Item("TypeID").ToString() = 1 Then
rootNode.ImageIndex = 0
rootNode.SelectedImageIndex = 0
Else
rootNode.ImageIndex = 1
rootNode.SelectedImageIndex = 1
End If
BindChildAreas(rootNode)
Next

End Sub

'递归绑定子区域
Sub BindChildAreas(ByVal fNode As TreeNode)

'父节点ID
Dim strSQL As String
Dim adapter As SqlDataAdapter
Dim cmd As SqlCommandBuilder
Dim table As New DataTable()
Dim MaterialInf As New DataSet
strSQL = "SELECT * FROM F_ProductInfoNodeChildrenList "
adapter = New SqlDataAdapter(strSQL, conn1)
cmd = New SqlCommandBuilder(adapter)
Dim rows As DataRow()
adapter.Fill(MaterialInf, "F_ProductInfoNodeChildrenList")
table = MaterialInf.Tables(0)
rows = table.[Select]("NodeID=" & fNode.Tag(1))
'子区域
If rows.Length = 0 Then
'递归终止,区域不包含子区域时
Return
End If

For Each dRow As DataRow In rows
Dim node As New TreeNode()
node.Tag = dRow
Dim strSQL1 As String
Dim adapter1 As SqlDataAdapter
Dim cmd1 As SqlCommandBuilder
Dim table1 As New DataTable()
Dim MaterialInf1 As New DataSet
strSQL1 = "SELECT * FROM F_ProductInfoNodeList where NodeID='" & dRow("ChildrenNodeID").ToString() & "'"
adapter1 = New SqlDataAdapter(strSQL1, conn1)
cmd1 = New SqlCommandBuilder(adapter1)
adapter1.Fill(MaterialInf1, "F_ProductInfoNodeList")
table1 = MaterialInf1.Tables(0)
node.Text = table1.Rows(0).Item("Name")
'添加子节点
fNode.Nodes.Add(node)
'递归
BindChildAreas(node)
If table1.Rows(0).Item("TypeID") = 1 Then
node.ImageIndex = 0
node.SelectedImageIndex = 0
Else
node.ImageIndex = 1
node.SelectedImageIndex = 1
End If
Next
End Sub

Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect

TreeView1.ContextMenuStrip = ContextMenuStrip2


End Sub


Private Sub 结构树_Load(sender As Object, e As EventArgs) Handles MyBase.Load
TreeView1.Nodes.Clear()
TreeView1.ImageList = ImageList1
BindRoot()


End Sub




Private Sub 刷新ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 刷新ToolStripMenuItem.Click
TreeView1.Nodes.Clear()
TreeView1.ImageList = ImageList1
BindRoot()
End Sub

Private Sub 增加ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles 增加ToolStripMenuItem.Click
递归添加.ShowDialog()
End Sub
End Class
...全文
307 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
if(TreeNode.Level == N) 在SQL数据源中判断(CTE需要SQL2005及以上) http://www.cnblogs.com/smailxiaobai/archive/2012/01/16/2323291.html 参考例子E

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧