******************关于TREEVIEW的显示问题

fhuibo 2006-08-18 10:08:39
各位:有一问题请教,因为我的数据表里的数据太多(总20000)条记录,想用Treeview显示。我使用下面的函数:
procedure TForm_RyJbqk.ReadNode(FNode: TTreeNode; FSJBM: string);
var
MySQL: string;
MyNode: TTreeNode;
MyRecord: PWARMRecord;
ADOQNode: TADOQuery;
begin
MySQL := 'SELECT * FROM TBM WHERE SJBM='''+FSJBM+''' ORDER BY XSSX';
ADOQNode := TADOQuery.Create(Self);
ADOQNode.Connection := DM.ADOConn;
with ADOQNode do
begin
Close;
SQL.Clear;
SQL.Text := MySQL;
Open;
while not eof do
begin
new(MyRecord);
MyRecord.bmid := trim(FieldByName('BMID').AsString);
MyRecord.bmdm := trim(FieldByName('BMDM').AsString);
MyRecord.bmmc := trim(FieldByName('BMMC').AsString);
MyNode := TreeVBm.Items.AddChildObject(FNode,MyRecord.bmmc,MyRecord);
if FieldByName('Code').AsString = 'UN' then
begin
MyNode.ImageIndex := 0;
MyNode.SelectedIndex := 0;
end
else
begin
MyNode.ImageIndex := 1;
MyNode.SelectedIndex := 2;
end;
ReadNode(MyNode,MyRecord.bmdm);
Next;
end;
end;
end;
可是FROM读取的时候太慢,大概需要10多分钟,谁有更好的方法,请提供一个,谢谢!
...全文
234 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
才子鸣 2006-08-18
  • 打赏
  • 举报
回复
對啊..不要一起加載.一級級的加.在OnExPanding的時候加載下一級就不會太慢了.
MoveFirst 2006-08-18
  • 打赏
  • 举报
回复
还有就是根据你排序和数据筛选条件的字段,在表中添加索引,这样会快些。
MoveFirst 2006-08-18
  • 打赏
  • 举报
回复
那就做分级显示,第一次,只加载第一级的节点,然后点击某个节点的时候判断是否有下级节点,有就再加载下级的节点
erhan 2006-08-18
  • 打赏
  • 举报
回复
不要用递归
王集鹄 2006-08-18
  • 打赏
  • 举报
回复
楼上说得对,如果没有加BeginUpdate。。EndUpdate机制每次添加都会刷新界面
另一种方案:
1、先添加第一级节点
2、用户点击节点后才增加子节点

PS:通过这样的语句TreeView1.Items[0].HasChildren := True;可以显示出"+"
踢踏 2006-08-18
  • 打赏
  • 举报
回复
1)一次查询出所要的数据,使用时过滤,不要再查询
2)在添加节点时,使用
Tree.items.BeginUpdate;
try
//添加节点
finally
Tree.items.EndUpdate;
end;
dataopen 2006-08-18
  • 打赏
  • 举报
回复
这也太多了吧

上面有相关源码 你可以参考一下。

www.cmtx.cn 论坛

http://nhcf.gxmu.net.cn/cbbs/dispbbs.asp?boardID=34&ID=1307&page=1

2,497

社区成员

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

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