我的数据库结构是这样:
AutoId CName FatherId
13 总公司 0
14 行政部 13
16 财务部 13
18 供应部 13
20 分公司 0
21 行政部 20
22 财务部 20要用treeview显示为这种效果:   ___总公司
        |___行政部
        |___财务部
        |___供应部
    
   ___分公司 
        |___行政部
        |___财务部用递归的代码如下,但这种方法速度太慢了,100多条记录需要5秒钟。如果逐级创建treeview该怎么写?我是新手,最好能帖上代码,谢谢……procedure TForm1.AddClass(AId: integer;FatherNode:TTreeNode);
var
    QryTmp:TADOQuery;
    myNode:TTreeNode;
    myLabel:TLabel;
begin
    QryTmp:=TADOQuery.Create(self);
    QryTmp.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
    QryTmp.SQL.Add('select * from tb1');
    QryTmp.SQL.Add('where FatherId='+inttostr(AId));
    QryTmp.Open;
    while not QryTmp.Eof do
    begin
        myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('CName').AsString);        //创建标签,caption存放各分支的AutoId表识
        myLabel:=TLabel.Create(self);
        myLabel.Visible:=false;
        myLabel.Caption:=QryTmp.fieldbyname('AutoId').AsString;
        myNode.Data:=myLabel;        AddClass(QryTmp.fieldbyname('AutoId').AsInteger,myNode); //递归调用过程
        QryTmp.Next;
    end;
    QryTmp.Free;
end;

解决方案 »

  1.   

    用DevExpress中的dxdbtreeview控件不用写代码就可以了
    ---------------------------------------
    你工作生活的好助手
    个人数字助理 V1.1
    天空软件园下载地址
    http://www.skycn.net/soft/21193.html
    华军软件园下载地址
    http://www.onlinedown.net/soft/35617.htm
      

  2.   

    dxdbtreeview是第三方控件吧?
    能给一个逐级创建treeview的节点例子吗?
    在线等,多谢……
      

  3.   

    我用treeview作了一个,实验成功(也许我的方法也比较麻烦) 仅给你作参考:
    代码如下:procedure TForm1.Button1Click(Sender: TObject);
    var stAutoid,stCname,stCname2,stGroupid:string;
      tnode:TTreeNode;
    begin
      with d1 do
      begin   CommandText:='select autoid,cname,fatherid from bb where fatherid=0';
       Active:=True;  end;
        d1.Recordset.MoveFirst;
      while not d1.eof do
      begin
         stGroupid:=d1.FieldValues['fatherid'];
         stAutoid:=d1.FieldValues['autoid'];
         stCname:=d1.FieldValues['cname'];
         tnode:=TreeView1.Items.AddFirst(nil,stCname);
         d1.MoveBy(1);
         with d2 do
         begin     CommandText:='select cname  from bb where fatherid='''+stAutoid+'''';
         Active:=True;
        end;
       d2.Recordset.MoveFirst;
      while not d2.eof do
      begin
        stCname2:= d2.FieldValues['cname'];
        TreeView1.Items.AddChild(tnode,stCname2);
        d2.MoveBy(1);
      end;
      d2.Active:=false;
      end;
    end;其中:
    d1: TADODataSet;    d2: TADODataSet;
      

  4.   

    谢谢liunini(妮妮) ,我试一下,过会儿结帖!