mytable.db 的字段为FatherId,Id
怎样用该控件显示该数据库呢?

解决方案 »

  1.   

    type
      PNodeRec = ^TNodeRec; //树结点附加信息
      TNodeRec = record
        CodeLevel: string;  //层次编码
        Coefficient:Integer;          //附加信息
      end;function LoadCode(treename:TTreeView;crTbl:TDBDataSet;
        field1,field2,field3,field4,field5:string;
        lestr:integer;jgname:string):Integer;    //create tree
    {treename :所建树名  crtbl :数据源   field1 :级别代码  field2 :显示内容
     field3   :树中附加信息    lestr : 是否根据级别代码来分层建树   jgname  :主标题
     field4   : 建树时各层图标代码     field5  :当树打开时图标代码 }
    var ShowTxt:String;
        Level:Integer;
        MyNode:array[0..6]of TTreeNode;
    TpNodeData:PNodeRec;
    begin
            Screen.Cursor:=crHourGlass;
            Level:=0;
            With crTbl do
                begin
                    try
                    if not Active then Open;
                    First;
                    treename.Items.Clear;
                    new(TpNodeData);
                    TpNodeData^.Codelevel :=jgname;
                    MyNode[Level]:=treename.Items.Addobject(treename.TopItem,jgname,TpNodeData);
                    MyNode[Level].ImageIndex:=4;
                    MyNode[Level].SelectedIndex:=4;
                    While Not Eof do
                    begin
                        ShowTxt:=FieldByName(field2).AsString;
                        if lestr=1
                        then Level:=GetLevel(fieldbyname(field1).AsString) 
                        else Level:=1;
                        if Level>0 then
                        begin
                            new(TpNodeData);
                            TpNodeData^.Codelevel :=FieldByName(field3).AsString ;
                            MYnode[level]:=treename.Items.AddChildObject(mynode[level-1],showtxt,tpnodedata);
                            if field4<>''
                            then MyNode[Level].ImageIndex:=fieldbyname(field4).AsInteger ;
                            if field5<>''
                            then MyNode[Level].SelectedIndex:=fieldbyname(field5).AsInteger ;
                        end;
                        Next;
                    end;
                    finally
                    Close;
                    end;
                end;
                    MyNode[0].Expand(False);//将首节点展开
                    Screen.Cursor:=crDefault;
                    Result:=LEVEL;
    end;
      

  2.   

    var
      node :TTreeNode;
    begin
      while not query1.Eof do
      begin
        Node :=TreeView1.Items.AddFirst(nil,query1.FieldByName('FatherID').AsString);
        while not query2.eof do
        begin
          TreeView1.Items.AddChild(node,FieldByName('ID').AsString);
          query2.Next;
        end;
        query1.Next;
      end;
    不知道是不是这个意思?
      

  3.   

    d_no相当于你指的FatherId
    w_no相当于你指的Id
    ////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////
    //////////数据库结构:                            //////////
    //////////department: name:部门名称,char         //////////
    //////////            d_no:部门号,int            //////////
    //////////worker:     name:员工姓名,char         //////////
    //////////            w_no:员工号,int            //////////
    //////////            d_no:部门号,int            //////////
    ////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, ComCtrls, Db, ADODB;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Button1: TButton;
        ADOQuery1: TADOQuery;    //连接department
        ADOQuery2: TADOQuery;    //连接worker
        Edit1: TEdit;            //结点信息
        procedure Button1Click(Sender: TObject);//生成树
        procedure TreeView1Click(Sender: TObject);//显示结点信息
        procedure FormClose(Sender: TObject; var Action: TCloseAction);//释放p_data
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      p_data:pstring;
    implementation{$R *.DFM}//生成树
    procedure TForm1.Button1Click(Sender: TObject);
    var
       fn,sn:ttreenode;    //fn:部门结点 sn:员工结点
    begin
      treeview1.Items.BeginUpdate;
      adoquery1.close;
      adoquery1.sql.clear;
      adoquery1.sql.add('select * from department');
      adoquery1.open;
      treeview1.Items.Clear;
      new(p_data);
      p_data^:='root';
      fn:=treeview1.Items.AddObject(nil,'root',p_data);
      while not adoquery1.Eof do
      begin
        with treeview1.Items do
        begin
          new(p_data);
          p_data^:=adoquery1.fieldbyname('d_no').asstring;
          sn:=treeview1.Items.AddChildobject(fn,adoquery1.fieldbyname('name').asstring,p_data);      adoquery2.close;
          adoquery2.sql.Clear;
          adoquery2.sql.add('select * from worker where d_no=:d_no');
          adoquery2.Parameters.ParamByName('d_no').value:=p_data^;
          adoquery2.open;
          while not adoquery2.Eof do
          begin
            new(p_data);
            p_data^:=adoquery2.fieldbyname('w_no').asstring;
            treeview1.Items.addchildobject(sn,adoquery2.fieldbyname('name').asstring,p_data);
            adoquery2.Next;
          end;
        end;
        adoquery1.Next;
      end;
      adoquery1.Close;
      adoquery2.close;
      treeview1.Items.EndUpdate;
    end;//显示结点信息
    procedure TForm1.TreeView1Click(Sender: TObject);
    begin
      if treeview1.Selected=nil then exit;  case treeview1.Selected.Level of
      1:begin
           edit1.text:='部门号:'+pstring(treeview1.selected.Data)^;
        end;
      2:begin
           edit1.text:='工号:'+pstring(treeview1.selected.Data)^;
        end;
      end;
    end;
    //释放p_data
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if p_data<> nil then Dispose(p_data);
    end;end.