同样的语句和数据记录,在生成TTreeView时比生成到TListBox慢了非常多,可有解决办法(100分)

  • 主题发起人 主题发起人 chenby
  • 开始时间 开始时间
C

chenby

Unregistered / Unconfirmed
GUEST, unregistred user!
While Not Query1.Eof do
begin
ListBOx1.Items.Add(Query1.FIeldBYname('KHBH').asstring);
Query1.Next;
end;
/********Query1中有3000条记录时,上述语句只需执行10秒以下**************/

While Not Query1.Eof do
begin
TreeView1.Items.AddChild(nil,Query1.FIeldBYname('KHBH').asstring);
Query1.Next;
end;
/********Query1中也是有3000条记录,上述语句生成TreeView时需要5分钟左右*****/

本人迫切需要生成TreeView,而又慢到令人无法忍受,而且真正的数据可能不只3000条
向各位高手求救了!
本人是连到Sybase的.
 
不是数据库的问题,TREEVIEW 有问题
换一个控件试一下(DxTreeview,DcTreeview )
 
http://www.inprises.com
 
在while之前加
treeview1.items.beginupdate
在while循环完之后加
treeview1.items.endupdate
就很快了
 
TreeView本身的问题,你可以用TreeView1.Items.Assign()
或者TreeView1.LoadFromFile()方法去试一些吧,效果好多了。
我当时是用LoadFromFile()解决的!
 
本人有一个问题
如果有下一级,也是从表中取出的
如果一开始就都出来下一级的就太慢了因为记录很多
就用判断如果有下一级则用一"+"号来表示
但是假如有3000条记录,循环3000次要发3000条的SQL命令到数据库执行非常的慢
各位有没有什么好办法?
 
如小逸所说,是 BeginUpdate 和 EndUpdate 的问题。我原来遇到过类似问题。
原因是 TTreeView 的刷新需要时间, BeginUpdate 可以让 TreeView 暂不刷新,最后
EndUpdate 时一次刷新。

To 小逸:
你可以为记录增加一个级别号和编码,比如:0101001 3 表示记录是第三级的结点,
是 01-01-001 这样的编码规则。这样,在 Select 时 Order By 编码,然后判断级别号,
一次就可以搞定。
 
多人接受答案了。
 
后退
顶部