ID Name ParentID
1 a 0
2 b 1
3 c 1
4 d 1
5 e 2
6 f 2
7 g 3
8 h 3
9 i 3
... ... ...
如上是树表table1的内容,即ID是每条记录的关键字,Name是树节点显示的内容,ParentID是该节点的父节点的ID
让它升成一个树。
要求:不要用递归!!!
求解!!!
1 a 0
2 b 1
3 c 1
4 d 1
5 e 2
6 f 2
7 g 3
8 h 3
9 i 3
... ... ...
如上是树表table1的内容,即ID是每条记录的关键字,Name是树节点显示的内容,ParentID是该节点的父节点的ID
让它升成一个树。
要求:不要用递归!!!
求解!!!
PRecX=^TRecX;
TRecX=record
Id,Pid:integer;
Name:string;
end;procedure TForm1.Button1Click(Sender: TObject);
var
fNode:TTreeNode;
P:PRecX; function FindParentID(PId:Integer):TTreeNode;
var
i:Integer;
begin
if Pid<>0 then
with TreeView1.Items do
for i:=0 to Count-1 do
if Assigned(Item[i].Data) and (PRecX(Item[i].Data)^.Id=PId) then
begin
Result:=Item[i];
Exit;
end; Result:=nil;
end;begin
with adoquery1 do
begin
close;
sql.text:='select id,ParentID,[Name] from t order by ParentID,ID';
open;
while not eof do
begin
New(P);
P^.Id:=FieldByName('id').AsInteger;
P^.Pid:=FieldByName('ParentID').AsInteger;
P^.Name:=FieldByName('Name').AsString;
fNode:=FindParentID(P^.Pid);
if fNode=nil then
TreeView1.Items.AddObject(nil,P^.Name,P)
else
TreeView1.Items.AddChildObject(fNode,P^.Name,P);
next;
end;
end;
end;
KeyFields: 子节点ID
DisplayFields:节点显示内容
ParentFields:父节点ID就可以了,treeview要实现这个功能的话,网上很多这个例子,