自己写的一个可以扩展5--10层的,每层可扩展99个结点的,层次清晰的树型结构
数据表:id(char),name(varchar)
id 结构为2-2-2-的结构,这样看起来层次清晰,不过缺点就是“ 新增结点的时候,父结点不知道怎么添加”
不过,作为一般的MIS系统,以及日常管理,应该足够了。
J:扩展的层次,要根据数据库的ID长度决定
node:树的一个结点
ds.tables("areas"):从数据库读取的一个数据表
Sub tree(ByVal j As Int32, ByVal node As TreeNode)
Dim i As Int32
Dim pnode As TreeNode
If j = 0 Then
For i = 0 To ds.Tables("areas").Rows.Count - 1
If Len(Trim(ds.Tables("areas").Rows(i)("a_id"))) = 2 Then
TreeView1.Nodes.Add(Trim(ds.Tables("areas").Rows(i)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(i)("a_name")))
End If
Next
For Each pnode In TreeView1.Nodes
tree(1, pnode)
Next
Else
For i = 0 To ds.Tables("areas").Rows.Count - 1
If Len(Trim(ds.Tables("areas").Rows(i)("a_id"))) = 2 * (j + 1) And Mid(node.Text, 1, 2 * j) = Mid(Trim(ds.Tables("areas").Rows(i)("a_id")), 1, 2 * j) Then
node.Nodes.Add(Trim(ds.Tables("areas").Rows(i)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(i)("a_name")))
End If
Next
If j < 9 Then
j = j + 1
Else
Exit Sub
End If
For Each pnode In node.Nodes
tree(j, pnode)
Next
End If
End Sub
关于 表结构 id, name ,parentid
这种方式,怎么添加一个结点呢?在树型结构中,怎么找到每个树结点的(primary key)呢?
这个我没搞明白,因为感觉挺麻烦的,有资料的可以发上来看看啊!
在此之前写的一个层次有限的树:
Sub initree()
ds.Clear()
TreeView1.Nodes.Clear()
wserver.gettable(ds, "areas")
Dim i, j, k, l As Int32
Dim node0 As TreeNode = New TreeNode("中国")
TreeView1.Nodes.Add(node0)
For i = 0 To ds.Tables("areas").Rows.Count - 1
'第一层结点
If Len(Trim(ds.Tables("areas").Rows(i)("a_id"))) = 2 Then
node0.Nodes.Add(Trim(ds.Tables("areas").Rows(i)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(i)("a_name")))
'第二层结点
Dim node1 As TreeNode
For j = i To ds.Tables("areas").Rows.Count - 1
For Each node1 In node0.Nodes
If Len(Trim(ds.Tables("areas").Rows(j)("a_id"))) = 4 And Mid(node1.Text, 1, 2) = Mid(Trim(ds.Tables("areas").Rows(j)("a_id")), 1, 2) Then
node1.Nodes.Add(Trim(ds.Tables("areas").Rows(j)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(j)("a_name")))
'第三层结点
Dim node2 As TreeNode
For k = j To ds.Tables("areas").Rows.Count - 1
For Each node2 In node1.Nodes
If Len(Trim(ds.Tables("areas").Rows(k)("a_id"))) = 6 And Mid(node2.Text, 1, 4) = Mid(Trim(ds.Tables("areas").Rows(k)("a_id")), 1, 4) Then
node2.Nodes.Add(Trim(ds.Tables("areas").Rows(k)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(k)("a_name")))
'添加第四层结点
Dim node3 As TreeNode
For l = k To ds.Tables("areas").Rows.Count - 1
For Each node3 In node1.Nodes
If Len(Trim(ds.Tables("areas").Rows(k)("a_id"))) = 8 And Mid(node3.Text, 1, 6) = Mid(Trim(ds.Tables("areas").Rows(k)("a_id")), 1, 6) Then
node3.Nodes.Add(Trim(ds.Tables("areas").Rows(k)("a_id")) & "_" & Trim(ds.Tables("areas").Rows(k)("a_name")))
End If
Next
Next
End If
Next
Next
End If
Next
Next
End If
Next
TreeView1.ExpandAll()
TreeView1.SelectedNode.Text = "中国"
End Sub