如何快速地实现 TreeView 的结点枚举?

LngDotin 2006-12-07 11:07:28
TreeView 的结点放在了数据库中,且所有结点的层次不同,只有通过判断父结点的子结点 ID 才能确定它的子结点个数,用了递归法,可是枚举时好慢(近3000个不同层次的结点)。老大们,谁有好的办法,给俺指条明路,谢谢了。
本帖属纯技术帖,谢绝路过顶贴、灌水等非讨论内容。
...全文
237 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwb1966 2006-12-08
  • 打赏
  • 举报
回复
一楼的正解, 就是说, 你程序一开始展现的Tree应该只包含第一层的结点, 但将该结点的HasChildren属性置true, 这样会在该结点前显示"+", 但并不真正从数据库中读. 当该结点被第一次展开时, 再到数据库中读取该结点下一层的内容, 按同样的方法仅读一层即可, 依次类推.

TreeView操作是相当慢的, 只有通过这种办法, 将一次性数据库读取分担到每次展开时读取, 才能解决这个问题, 而且给人的感觉丝毫没有受到影响.

当然, 这种方法也有弱点, 比如调入以后要直接在Tree中遍历查找的功能就要受到限制了.
controstr 2006-12-07
  • 打赏
  • 举报
回复
用几个字段分别存放TreeView各节点的值,本身的序号,父节点的序号,及排序序号
在显示时,如果该节点值没有父节点,则该节点值本身就是父节点,如果存在父节点,则先查找到它的父节点,再AddChild就可以了
一个循环分别读取数据库中的数据就可以遍历所有数据

不知道我说的LZ是否明白
LngDotin 2006-12-07
  • 打赏
  • 举报
回复
回答我想干什么:
一个空 TreeView ,我想把藏在数据库中的各结点按层次枚举出来。数据库有一个字段放有父、子结点的逻辑关系。
wood542344 2006-12-07
  • 打赏
  • 举报
回复
这个问题好像以前的帖子讨论过的。递归的效率是慢了点,不过可以不要一次性全把树整棵都画起来啊。可以先把根结点和根结点下一层结点先画好。下一层子结点先不要画。如果有子结点则先加一个空结点,没有则不加。
最后点击有子结点的结点时,再去数据库里找子结点。。。
这样不会很卡,但访问数据库的次数明显增多。楼主自己看着办喽。

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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