1,453
社区成员
发帖
与我相关
我的任务
分享
表1
id=1 bm="广东省"
id=2 bm="广西壮族自治区"
。。。。。。
表2
b1=1 id=4 bm="佛山市"(属广东省)
b1=1 id=5 bm="湛江市"(属广东省)
b1=2 id=6 bm="桂林市"(属广西壮族自治区)
b1=2 id=7 bm="梧州市"(属广西壮族自治区)
。。。。。。
表3
b1=4 id=8 bm="顺德区"(属佛山市)
b1=4 id=9 bm="南海区"(属佛山市)
b1=6 id=11 bm="阳朔县"(属桂林市)
b1=7 id=12 bm="长洲区"(属梧州市)
。。。。。。
表4
b1=8 id=15 bm="乐从镇"(属顺德区)
b1=8 id=17 bm="大良镇"(属顺德区)
b1=9 id=20 bm="大沥镇"(属南海区)
b1=12 id=25 bm="新兴路"(属长洲区)
。。。。。。
表5
。。。。。。
规律:b1对应于上一级的id。
求用vb treeview列出上面树的好方法,每一个分支有独一无二的KEY。
Private Sub Form_Load()
…………
Dim xNode As Node
'初始化一个顶级祖宗龟节点
Set xNode = TreeView1.Nodes.Add
xNode.Text = "龟"
xNode.Key = "龟"
Set xNode = Nothing
'查一级节点
Set rs = New ADODB.Recordset
rs.Open "select * from 表 where upid=0", conn, adOpenKeyset, adLockReadOnly
While Not rs.EOF
'显然这里添加的是龟儿子节点咯
Set xNode = TreeView1.Nodes.Add("龟", tvwChild)
xNode.Text = rs.Fields("bm")
xNode.Key = "n" & rs.Fields("id")
Set xNode = Nothing
'检查一下是否有龟孙子节点,如果有龟孙子节点,别管龟孙子是谁添加一个临时节点先,目的当然是显示龟儿子前面的+号咯
Set rs1 = New ADODB.Recordset
rs1.Open "select count(1) as c from 表 where upid=" & rs.Fields("id") , conn, adOpenKeyset, adLockReadOnly
If rs1.Fields(0) <> 0 Then
Set xNode = TreeView1.Nodes.Add("n" & rs.Fields("id"), tvwChild)
xNode.Text = "子节点"
xNode.Key = "n" & rs.Fields("id") & "tmp"
End If
Set rs1 = Nothing
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
End Sub
再然后就是在treeview_expand事件里面把真的龟孙子纠出来,把冒牌的龟孙子干掉
Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
'检查一下点的是不是龟祖宗,如果点击的不是龟后代就不处理
If Node.Key = "龟" Then Exit Sub
Dim xNode As Node
'先把冒充龟孙子的临时节点删掉
TreeView1.Nodes.Remove (Node.Key & "tmp")
'查询真正的龟孙子节点
Set rs = New ADODB.Recordset
rs.Open "select * from 表 where upid=" & Replace(Node.Key, "n", ""), conn, adOpenKeyset, adLockReadOnly
While Not rs.EOF
Set xNode = TreeView1.Nodes.Add(Node.Key, tvwChild)
xNode.Text = rs.Fields("bm")
xNode.Key = "n" & rs.Fields("id")
Set xNode = Nothing
'检查一下龟孙子还有没有儿子,有的话再加个临时节点,目的当然也是为了前面的+号咯
Set rs1 = New ADODB.Recordset
rs1.Open "select count(1) as c from 表 where upid=" & rs.Fields("id") , conn, adOpenKeyset, adLockReadOnly
If rs1.Fields(0) <> 0 Then
Set xNode = TreeView1.Nodes.Add("n" & rs.Fields("id"), tvwChild)
xNode.Text = "子节点"
xNode.Key = "n" & rs.Fields("id") & "tmp"
End If
Set rs1 = Nothing
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
End Sub
系唔系好简单,其实大家老早就已经把思路给你的了
快个把月了吧http://bbs.csdn.net/topics/390891819
考虑设置编码级次,并将数据放置到一张表中,比如级次为 2 2 2 2既为4级每级两位,第一级为省,第二级为市,第三级为区或县,第四级为镇,01广东,02广西,03江苏,0101广州,0102湛江,0201桂林,0202南宁,010101广州某区1,010102广州某区2,,,,,,,这样表里只要一个编码字段,一个名称字段就行了,很多软件都是这样的,比如用友软件等