这是我建的一个构树的过程,它能帮我建起树来,运行正常,代码如下:
procedure AddClass(AId: string; FatherNode: TTreeNode; treeview1: Ttreeview);
var
QryTmp: TADOQuery;
myNode: TTreeNode;
myLabel: TLabel;
begin
QryTmp := TADOQuery.Create(application);
QryTmp.ConnectionString:='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=mrp';
QryTmp.SQL.Add('select a.*,b.物料名称 from 物料清单 a,物料主文件 b where a.物料编号=b.物料编号');
QryTmp.SQL.Add('and 父项编号=:AId');
qrytmp.Parameters.ParamByName('aid').value := aid;
QryTmp.Open;
while not QryTmp.Eof do
begin
myNode := Treeview1.Items.AddChild(FatherNode, trim(QryTmp.fieldbyname('物料名称').AsString));
myLabel := TLabel.Create(application);
myLabel.Visible := false;
myLabel.Caption := QryTmp.fieldbyname('物料编号').AsString;
myNode.Data := myLabel;
AddClass(QryTmp.fieldbyname('物料编号').Asstring, myNode, treeview1); //递归用过程
QryTmp.Next;
end;
QryTmp.Free;
end;/////////////////////////
我的问题在这里:
procedure TForm3.TreeView1Click(Sender: TObject);
begin
edit1.Text :=TLabel(Treeview1.Selected.data).Caption;//显示物料编号(这个我会了)
edit2.text:=?//显示父项编号
edit3.text:=?//显示需要数量(注:物料编号、父项编号、需要数量 是同一条记录的)
end;
我现在不知道怎么把edit2、edit3成功显示出来,请帮忙,大虾们,谢谢……

解决方案 »

  1.   

    一个苯办法,根据物料编号再select一次
      

  2.   

    不行的,因为select 的话,条件不够充分的。
    高手们,帮帮忙啦……
      

  3.   

    你可以把每个节点的信息都保存到data属性里啊
    你定义一个type TMyNode来存放这些信息,然后赋给data,这样就不用再查数据库了
    type
      TMyNode = class(TObject)
      private
        aId: string;
        aparentId: String;  
        acount: integer;      
      public
        property Id: string read aId write aId;
        property parentId: String read aparentId write aparentId;
        property Count: integer read acount write acount;
      end;
      

  4.   

    unit DM;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls, ComCtrls;type
       TMyNode = record
        FTYPE_ID: string;
        FTYPE_NAME: String;
        FTYPE_FROM_ID:String;
      end;
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        TreeView1: TTreeView;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure TreeView1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      procedure AddClass(AId: string; FatherNode: TTreeNode; treeview1: Ttreeview);implementation
    {$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     addclass('0',nil,treeview1)
    end;procedure AddClass(AId: string; FatherNode: TTreeNode; treeview1: Ttreeview);
    var
    ADOQuery1:TADOQuery;
    myNode: TTreeNode;
    PMyNode: ^TMyNode;
    begin
    ADOQuery1:=TADOQuery.Create(application);
    adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\Documents and Settings\Administrator\桌面\XVJIE2002_DBTreeView\新建文件夹\db1.mdb;Jet OLEDB:Database Password=""' ;
    ADOQuery1.SQL.Add('select * from 编码定义 where TYPE_FROM_ID=:Aid');
    ADOQuery1.Parameters.ParamByName('Aid').value := aid;
    ADOQuery1.Open;
    while not ADOQuery1.Eof do
    begin
    new(PMyNode);
    myNode := Treeview1.Items.AddChild(FatherNode,trim(ADOQuery1.fieldbyname('TYPE_NAME').AsString));PMyNode^.FTYPE_ID:=ADOQuery1.fieldbyname('TYPE_ID').AsString;
    PMyNode^.FTYPE_NAME:=ADOQuery1.fieldbyname('TYPE_NAME').AsString;
    PMyNode^.FTYPE_FROM_ID:=ADOQuery1.fieldbyname('TYPE_FROM_ID').AsString;
    myNode.Data := PMyNode;AddClass(ADOQuery1.fieldbyname('TYPE_ID').Asstring, myNode, treeview1); //递归用过程
    ADOQuery1.Next;
    end;
    ADOQuery1.free;
    end;
    procedure TForm1.TreeView1Click(Sender: TObject);
    begin
    edit1.Text :=TMyNode(Treeview1.Selected.data^).FTYPE_ID;//显示物料编号(这个我会了)
    edit2.text:=TMyNode(Treeview1.Selected.data^).FTYPE_NAME;//显示父项编号
    edit3.text:=TMyNode(Treeview1.Selected.data^).FTYPE_FROM_ID;//显示需要数量(注:物料编号、父项编号、需要数量 是同一条记录的)
    end;end.上班忙啊,你试试,我也不是很懂