求用vb treeview列出库显示多层树的好方法,每一个分支有独一无二的KEY

aamiiLA 2014-09-12 05:14:44


表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。
...全文
376 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
三楼の郎 2014-09-24
  • 打赏
  • 举报
回复
如果你一定要用这许多表来做的话,你可以看看你在http://bbs.csdn.net/topics/390875557这篇提问里面清零小妞给你的回复,人家已经在里面告诉你怎么处理Key的问题啦,剩下就是自己好好琢磨琢磨
三楼の郎 2014-09-24
  • 打赏
  • 举报
回复
算啦,再帮你一次啦。 首先表 用下面这个啦,实现你的需求肯定冇问题的啦 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
系唔系好简单,其实大家老早就已经把思路给你的了
aamiiLA 2014-09-24
  • 打赏
  • 举报
回复
这样无论多少层级都可以啦。
aamiiLA 2014-09-24
  • 打赏
  • 举报
回复
天开了,加个else exit for (如果第一轮找不到下一层的首个记录则不查找)搞定!这样就不会造成关键字不唯一的问题了.感谢clear_zero 和CityBird 之前的思路和方法,你们真是大众救星啊,编程界的领军英雄。一起来吧,国庆可以放大假啦!
三楼の郎 2014-09-23
  • 打赏
  • 举报
回复
快个把月了吧
clear_zero 2014-09-23
  • 打赏
  • 举报
回复
你还纠结这个问题呢啊,记得我跟你说的写在treeview_expand里面解决不知道你执行了没有
aamiiLA 2014-09-23
  • 打赏
  • 举报
回复
引用 5 楼 leafletyje 的回复:
刚解决的,供参考:
引用
http://bbs.csdn.net/topics/390891819
你这个太简单,我的有无限层级。
JIACISCO 2014-09-22
  • 打赏
  • 举报
回复
刚解决的,供参考:
引用
http://bbs.csdn.net/topics/390891819
aamiiLA 2014-09-22
  • 打赏
  • 举报
回复
我之前也想过这办法,增加记录时查找相同类型中的最大值,然后加1。
aamiiLA 2014-09-22
  • 打赏
  • 举报
回复
引用 2 楼 shbc001 的回复:
考虑设置编码级次,并将数据放置到一张表中,比如级次为 2 2 2 2既为4级每级两位,第一级为省,第二级为市,第三级为区或县,第四级为镇,01广东,02广西,03江苏,0101广州,0102湛江,0201桂林,0202南宁,010101广州某区1,010102广州某区2,,,,,,,这样表里只要一个编码字段,一个名称字段就行了,很多软件都是这样的,比如用友软件等
这种方法有缺陷啊,比如某个项目超过1000个;或者用户增删记录(都只能是找到最大的加1,这样的话增删1000次)就会造成系统错误崩溃。
清茶708 2014-09-12
  • 打赏
  • 举报
回复
考虑设置编码级次,并将数据放置到一张表中,比如级次为 2 2 2 2既为4级每级两位,第一级为省,第二级为市,第三级为区或县,第四级为镇,01广东,02广西,03江苏,0101广州,0102湛江,0201桂林,0202南宁,010101广州某区1,010102广州某区2,,,,,,,这样表里只要一个编码字段,一个名称字段就行了,很多软件都是这样的,比如用友软件等
aamiiLA 2014-09-12
  • 打赏
  • 举报
回复
困扰很久了,始终得不到解决,求高手。
内容概要:本文详细介绍了一个基于Python的校园招聘平台的设计与实现,旨在通过信息化手段提升校园招聘的效率与精准度。平台采用Python主流框架(如Django/Flask)构建,涵盖用户权限管理、招聘与简历数据建模、智能匹配推荐、日志监控与统计分析等核心模块。系统支持学生、企业、就业部门等多角色协同,通过结构化数据模型和业务流程控制,实现了岗位发布、简历投递、状态流转、权限校验等功能,并结合TF-IDF与余弦相似度算法实现简历与岗位的智能匹配。代码示例展示了用户角色模型、企业岗位模型、简历分表设计、投递状态机、权限装饰器及推荐服务等关键实现,体现了系统的可扩展性与安全性设计。; 适合人群:具备Python Web开发基础,熟悉Django或Flask框架,有一定数据设计和前后端交互经验的开发者,尤其是从事教育信息化、招聘系统开发或校园服务平台建设的研发人员;也适合计算机相关专业高年级本科生或研究生作为毕业设计参考。; 使用场景及目标:① 构建高校内部统一的校园招聘管理系统,替代传统低效的线下招聘模式;② 实现学生与企业岗位的智能匹配与个性化推荐,提升人岗匹配效率;③ 为企业和高校就业部门提供数据驱动的招聘分析与决策支持;④ 学习多角色权限控制、状态机设计、ORM建模、缓存与异步任务等实际开发技巧。; 阅读建议:此资源以实际项目为导向,不仅提供完整模型设计与代码片段,还深入剖析了系统架构与业务逻辑。建议读者结合代码示例搭建本地开发环境,动手实践模型定义、API接口开发与推荐算法集成,并重点关注权限控制、数据安全与性能优化等关键设计,以全面提升全栈开发与系统设计能力。

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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