回 帖 发 新 帖 刷新版面

主题:[讨论]TreeView读取数据的速度问题

从数据库中读取数据,有几千条甚至更多,我使用的递归调用,等几分钟都没加载玩,请高手给我改进下代码~  QQ:85050840

procedure TForm1.AddClass_list(AId:String;FatherNode:TTreeNode);//添加分类过程 1
var
  QryTmp:TADOQuery;
  myNode:TTreeNode;
  myLabel:TLabel;
begin
  QryTmp:=TADOQuery.Create(self);
  QryTmp.ConnectionString:=linkstr;
  QryTmp.SQL.Add('select * from list2');
  QryTmp.SQL.Add('where lastbh='''+AId+''' order by bh');
  QryTmp.Open;
  while not QryTmp.Eof do
  begin
      myNode:=RzTreeView1.Items.AddChild(FatherNode,QryTmp.fieldbyname('bh').AsString+' '+QryTmp.fieldbyname('cname').AsString);
      sbh[mynode.Index,0]:=QryTmp.fieldbyname('bh').AsString;
      sbh[mynode.Index,1]:=QryTmp.fieldbyname('cname').AsString;
      //创建标签,caption存放各分支的AutoId表识
      myLabel:=TLabel.Create(self);
      myLabel.Visible:=false;
      myLabel.Caption:=QryTmp.fieldbyname('bh').AsString;
      myNode.Data:=myLabel;

     AddClass_list(QryTmp.fieldbyname('bh').AsString,myNode); //递归调用过程
      QryTmp.Next;
  end;
  QryTmp.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

    linkstr:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
    AddClass_list('0',nil);
end;

数据库结构为
01
  0101
    010101........
这种类型~

回复列表 (共1个回复)

沙发

这个问题具有典型性。

在开始往TreeView中添加子项前首先RzTreeView1.BeginUpdate,添加完以后再RzTreeView1.EndUpdate,这样速度就会提高很多很多。本人经常往TreeView中添加大量子项,就是采用这个办法。

我来回复

您尚未登录,请登录后再回复。点此登录或注册