这个问题我正在做,若是你从一个表中取数据,可以用递归,若是从不同的表取数据
那就一层一层的取吧!
从一个表中取数据:
表的结构是:TdgTest1(SQL Server2000)
idNo 4 char
prevIdNo 4 char
idName 10 char
创建树:
procedure TForm1.CreateTree(var ANode: TTreeNode; var pid: string);
var
sName : string;
currName : string;
id : string;
currid : string;
begin
ADODataSet2.Active := false;
ADODataSet2.CommandText := '';
ADODataSet2.CommandText := 'select idNo, prevIdNo, idName from TdgTest1 where prevIdNo='''+pid+'''';
ADODataSet2.Active := true;
while not ADODataSet2.Eof do
begin
//ToDo:
sName := ADODataSet2.FieldByName('idName').AsString;
currName := trim(sname);
ANode := TreeView1.Items.AddChild(ANode, currname);
id := ADODataSet2.FieldByName('idNo').AsString;
currid := id;
CreateTree(Anode, id);
ANode := ANode.parent;
ADODataSet2.Active := false;
ADODataSet2.CommandText := '';
ADODataSet2.CommandText := 'select idNo, prevIdNo, idName from TdgTest1 where prevIdNo='''+pid+'''';
ADODataSet2.Active := true;
ADODataSet2.Locate('idNo', currid, [loCaseInsensitive]);
ADODataSet2.Next;
end;
end;
调用的时候是:
procedure TForm1.Button5Click(Sender: TObject);
var
t : TTreeNode;
id : String;
begin
t := nil;
id := '0000';
TreeView1.Items.Clear;
CreateTree(t, id);
TreeView1.SetFocus;
end;
希望对你有帮助
现在较忙,以后详细给你说!