procedure CreateTree(var ANode : TTreeNode; var pid : integer); var id : integer; sname : string; bmk : TBookMark; begin with form1,Query1 do begin filter := 'parentid=' + inttostr(pid); while not Eof do begin sname := FieldByName('name').AsString; Anode := Treeview.Items.AddChild(Anode, sname); id := FieldByName('ID').AsInteger; bmk := GetBook; CreateTree(ANode,id ); Anode := Anode.Parent; filter := 'parentid=' + inttostr(pid); if Query1.BookValid( bmk ) then begin GotoBook(bmk); FreeBook(bmk); end; next; end; end; end;procedure TForm1.Button1Click(Sender: TObject); var t : TTreeNode; Id : integer; begin query1.SQL.Add('select * from ttreeview'); query1.Open; query1.Filtered:=true; treeview.Items.clear; t := nil; id := 0; createtree(t,id); end;
参考 with rationdatamodule.gcquery do begin close; sql.Clear; sql.Add('select * from t_gcsm order by gcbh'); prepared; open; first; if recordcount<>0 then begin for i:=1 to recordcount do begin gcm:=trim(fieldbyname('gcm').asstring); treeNodeparent:=TreeView1.Items.Add(nil,gcm); with rationdatamodule.demladoquery1 do begin close; sql.clear; sql.Add('select * from t_deml where gcm=:gcm'); parameters.ParamByName('gcm').value:=gcm; prepared; open; first; if recordcount<>0 then begin for j:=1 to recordcount do begin xjmc:=trim(fieldbyname('xjmc').asstring); treeNodechild:=TreeView1.Items.Addchild(treeNodeparent,xjmc); next; end; end; end; next; end; end; end;
一个循环就够了
var
id : integer;
sname : string;
bmk : TBookMark;
begin
with form1,Query1 do
begin
filter := 'parentid=' + inttostr(pid);
while not Eof do
begin
sname := FieldByName('name').AsString;
Anode := Treeview.Items.AddChild(Anode, sname);
id := FieldByName('ID').AsInteger;
bmk := GetBook;
CreateTree(ANode,id );
Anode := Anode.Parent;
filter := 'parentid=' + inttostr(pid);
if Query1.BookValid( bmk ) then
begin
GotoBook(bmk);
FreeBook(bmk);
end;
next;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
t : TTreeNode;
Id : integer;
begin
query1.SQL.Add('select * from ttreeview');
query1.Open;
query1.Filtered:=true;
treeview.Items.clear;
t := nil;
id := 0;
createtree(t,id);
end;
with rationdatamodule.gcquery do
begin
close;
sql.Clear;
sql.Add('select * from t_gcsm order by gcbh');
prepared;
open;
first;
if recordcount<>0 then
begin
for i:=1 to recordcount do
begin
gcm:=trim(fieldbyname('gcm').asstring);
treeNodeparent:=TreeView1.Items.Add(nil,gcm);
with rationdatamodule.demladoquery1 do
begin
close;
sql.clear;
sql.Add('select * from t_deml where gcm=:gcm');
parameters.ParamByName('gcm').value:=gcm;
prepared;
open;
first;
if recordcount<>0 then
begin
for j:=1 to recordcount do
begin
xjmc:=trim(fieldbyname('xjmc').asstring);
treeNodechild:=TreeView1.Items.Addchild(treeNodeparent,xjmc);
next;
end;
end;
end;
next;
end;
end;
end;