TreeView 连接数据库

jainkai 2018-04-07 04:16:34

首先表 用下面这个,实现你的需求肯定冇问题的啦
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)‘’这里应该是第2个问题
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


今天学习树形结构,以上是论坛找到的回复,原贴https://bbs.csdn.net/topics/390884432(14年)

感觉很有用,就是发现两个BUG,都发生在重发展开+的时候,不知道如何解决,请问下各位:
第一个报错,当第二次展开+时,因为哪个临时的子节点已经删掉了,所以找不到那个KEY,所以报错了,我用ON ERROR RESUME NEXT屏蔽了,勉强可以用

第二个问题是每次折叠后再展开,会重复加载,
试来拭去都没有好的方案,不知道怎么样才能只加载一次

...全文
367 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
脆皮大雪糕 2018-04-10
  • 打赏
  • 举报
回复
本来还想仔细看看啥问题的,看到楼上回复的这个,算了,智商堪忧,未必能在有限的时间里倒腾清楚
jainkai 2018-04-09
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
百度搜相关关键字。

赵老师,百度想在不行了,好像搜不到了。
赵4老师 2018-04-08
  • 打赏
  • 举报
回复
百度搜相关关键字。

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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