算啦,再帮你一次啦。首先表 用下面这个啦,实现你的需求肯定冇问题的啦 id bm upid 1 广东省 0 2 广西壮族自治区 0 3 佛山市 1 4 桂林市 2 5 顺德区 3 id字段是自增型,upid 整型,upid=0表示是根,非0表示上级的id。首先在Form_Load里面加载第一层节点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系唔系好简单,其实大家老早就已经把思路给你的了
id bm upid
1 广东省 0
2 广西壮族自治区 0
3 佛山市 1
4 桂林市 2
5 顺德区 3
id字段是自增型,upid 整型,upid=0表示是根,非0表示上级的id。首先在Form_Load里面加载第一层节点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系唔系好简单,其实大家老早就已经把思路给你的了