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

LngDotin 2006-12-07 11:07:28
TreeView 的结点放在了数据库中,且所有结点的层次不同,只有通过判断父结点的子结点 ID 才能确定它的子结点个数,用了递归法,可是枚举时好慢(近3000个不同层次的结点)。老大们,谁有好的办法,给俺指条明路,谢谢了。
本帖属纯技术帖,谢绝路过顶贴、灌水等非讨论内容。
...全文
235 4 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
这个问题好像以前的帖子讨论过的。递归的效率是慢了点,不过可以不要一次性全把树整棵都画起来啊。可以先把根结点和根结点下一层结点先画好。下一层子结点先不要画。如果有子结点则先加一个空结点,没有则不加。
最后点击有子结点的结点时,再去数据库里找子结点。。。
这样不会很卡,但访问数据库的次数明显增多。楼主自己看着办喽。
一、简介 通过这个课程带大家从零开发一款功能全面的后台管理系统,包括项目搭建、功能实现到最后的Linux系统部署全过程。本课程使用SpringMVC + Spring + Mybatis作为主体框架,使用AdminLTE作为前端框架,使用主流关系型数据库Mysql作为存储数据库,使用非关系型数据库Redis作为缓存数据库,并集成SpringSecuriy安全框架做权限的动态管理,集成Swagger2自动生成接口文档,集成Druid连接池进行SQL性能监控,集成ActiveMQ消息中间件进行异步解耦,提高性能。最后使用linux系统进行服务部署,并搭建nginx反向代理服务器提高网站性能。 二、学习目标 通过本课程的学习带大家掌握SSM框架的开发流程,并熟练使用SpringSecurity做为安全框架进行权限管理,整合相关优秀的开源框架进行功能开发。还在项目中带大家学习前端相关的Jquery、Bootstrap等知识。课程束之后希望大家能做到独立进行开发项目的目的,增强解决问题的能力,具备功能落地实现的能力。 三、课程涉及知识点 SpringMVC源码分析Mybatis源码分析通用MapperMysql数据库Redis缓存实现ActiveMQ消息中间件SpringSecurity鉴权Swagger2接口文档生成自定义注解AOP切面编程自定义过滤器Logback日志整合Druid性能监控Linux系统Nginx反向代理Ajax异步请求技术Jquery基本使用AdminLTE前端框架Chart图表-线状图和饼状图百度地图定位城市BootStrap前端框架BootStrap-Table插件BootStrap-Treeview插件Markdown编辑器403、404、500错误页面配置数据库事务消息提示插件toastr.js图片上传插件bootstrap fileinput数字滚动效果pv/uv流量统计...四、课程部分内容截图如下 1、首页 2、菜单管理 3、图床管理 4、图标管理 5、留言反馈管理 6、druid监控 7、登录日志

13,826

社区成员

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

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