treeview控件显示速度慢 怎么解决

shiguangxin 2005-10-20 10:53:27
使用treeview显示数据库数据
使用 TV.Nodes.Add 添加节点
加 doevents 可以看到节点的添加过程

无论是数据量大还是数据量小 填加单个速度都没什么变化
还有就是 TV.Nodes.Clear 清空时也是非常的慢

请问这是treeview的问题还是我程序的问题

请问应该怎么来提高速度呀

...全文
792 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
electricperi 2005-12-03
  • 打赏
  • 举报
回复
最好不要把整颗树一次性建立起来。因为用户在使的时候也是要一层层展才选定目标再操作的。子节点都可以在用户需要查看时再建立,这样,可能80%的节点都不必加入,就达到了软件的要求。
northwolves 2005-11-15
  • 打赏
  • 举报
回复
建议子节点在父节点点击事件中加载.

节点多时,可以先加载可见部分的节点,其他节点在TREEVIEW 的 SCROLL事件中再加载
clear_zero 2005-11-15
  • 打赏
  • 举报
回复
1.逐层加入:现加第一层子节点,在expand函数中加下面的

2.去掉doevents确实可以提高速度,我在1k个节点下试验过了。可以用一个progressbar来显示进度

3.是否是连接数据库的速度,也就是说从数据库取数据的时间消耗太大。试着用等量的数组来代替数据库试验一下就知道了。

多试验就出来了,希望对你有帮助
射天狼 2005-11-15
  • 打赏
  • 举报
回复
数据量大的时候用doevents语句可以空闲CPU资源,使程序看上去不会像死机。不过这是以降低速度为低价的(因为程序要刷新界面)。

提升速度有两种方法:

一是将控件的AutoRedraw 属性先设置为False,添加完数据后,再设置为True
二是填加数据之前将控件的Visible属性设置为False,添加完后再设置为True

其实这两种方法都是在填加数据的时候防止控件重绘,以加快速度。
Tiger_Zhao 2005-11-14
  • 打赏
  • 举报
回复
>根据大类检索子类数据
意思是不是每个大类都要做一次 SQL 的 SELECT 操作,如果是的话,请测试一下:
不执行 Treeview.node.add,仅仅将两层循环全部执行一下,是否很慢?

建议将全部的大类和全部的子类用两个 RecordSet 一次性读入,用大类检索子类只需设置 RecordSet.Filter 属性就可以了。
wo22ni 2005-11-14
  • 打赏
  • 举报
回复


想办法减少循环次数....

你的循环次数太多了吧...显示出来的只有百把行,你是一个个查出来显示的,循环次数当然更多了.想办法减少循环次数....
zlt982001 2005-10-22
  • 打赏
  • 举报
回复
把你大致的代码贴出来把
xmf_jx 2005-10-22
  • 打赏
  • 举报
回复
可以先加第一层,当用户点击含有某个子结点的结点时,再加载其下面的内容,不就可以了吗
fishmans 2005-10-21
  • 打赏
  • 举报
回复
不加doevnts快吗?
shiguangxin 2005-10-21
  • 打赏
  • 举报
回复
不加doevnts也慢

为什么呀
shiguangxin 2005-10-20
  • 打赏
  • 举报
回复
就是
do while rst.eof=false

tv.node.add

rst.movenext
loop

程序就是这样呀
weiweiplay 2005-10-20
  • 打赏
  • 举报
回复
如果你的TreeView的Node不多的话,那就是你的程序的问题,如果很多是正常现象,写TreeView前先使TreeView.Visible = False,写完后再设置成True,这样至少看不出来
上官云峰 2005-10-20
  • 打赏
  • 举报
回复
还是你程序的问题,
shiguangxin 2005-10-20
  • 打赏
  • 举报
回复
可是我的数据量也不大呀
就几百条纪录呀

是这样的
有两个表 一个记录大类信息 一个记录大类里的子类信息
先循环大类
显示大类数据
根据大类检索子类数据
循环显示子类数据

数据量并不大呀
为什么呀??
fishmans 2005-10-20
  • 打赏
  • 举报
回复
数据量大是正常的

1.
可用lockwindowupdate treeview1.hwnd 先禁止控件更新
添加数据完成后再用lockwindowupdate 0 解禁
2.可先添加第一层数据,展开时再加载下层数据
winehero 2005-10-20
  • 打赏
  • 举报
回复
数据量大则分批显示,一次不用全部加载,加载两层就行。
liang80318 2005-10-20
  • 打赏
  • 举报
回复
估计就是记录太多的原因
我做的这一部,三层机构,十几个父节点,一百多个子节点,速度很正常
但是系统管理员进入后,需要看的就有大约要番10倍的数据量了
显示的非常慢,但是显示出来以,速度也就正常了
weiweiplay 2005-10-20
  • 打赏
  • 举报
回复
那可能是你的记录太多了
do while not rst.eof

tv.node.add

rst.movenext
loop

1,451

社区成员

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

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