procedure TQiuZuDjForm.InitTreeView(Tree: TTreeView; Tablename: string);
var
  AQueryTree:TAdoquery;  //Query Contrel
  QueryStr:string;       //Query String
  MyNode,MyNodeA:TTreeNode;
  //i:Integer;
begin
  AQueryTree:=TADOQuery.Create(nil);
  AQueryTree.Connection:=DM.ADOCon;
  Tree.Items.Clear;
  //check paremater
  QueryStr:='select * from '+tablename;
  AQueryTree.SQL.Text:=QueryStr;
  AQueryTree.Open;
  //estimate if empty
  while not AQueryTree.Eof do
    begin
      MyNode:=Tree.Items.Add(nil,Trim(AQueryTree.fieldbyname('中山区').AsString));
      Tree.Items.AddChild(MyNode,Trim(AQueryTree.fieldbyname('秀月街').AsString));
      MyNodeA:=Tree.Items.AddChild(MyNode,'租金:'+Trim(AQueryTree.fieldbyname('租金').AsString));
      AQueryTree.Next;
    end;
  AQueryTree.Free;
end;
这是我初始化树的,我想实现这样的结果怎么做?
中山区
    秀月街
        租金500
        租金600
    桃源街
        租金400
        租金300
沙河口区
    XX街
       租金400  
       租金400
    XX接
       租金400
请问怎么改呀?

解决方案 »

  1.   

    你的数据库的结构?参考:
    ////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////
    //////////数据库结构:                            //////////
    //////////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.