读书人

Ttreeview控件小疑点,低手学

发布时间: 2012-04-20 15:27:03 作者: rapoo

Ttreeview控件小问题,高手进,低手学
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
让它升成一个树。
要求:不要用递归!!!
求解!!!

[解决办法]
未测试,应该没错

Delphi(Pascal) code
type  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;
[解决办法]
如果是从数据库读取出来的话,用DEV系列控件CXTREELIST的话不用写一句代码,只需要设置
KeyFields: 子节点ID

DisplayFields:节点显示内容

ParentFields:父节点ID

就可以了,treeview要实现这个功能的话,网上很多这个例子,

读书人网 >.NET

热点推荐