首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Ttreeview控件小疑点,低手学

2012-04-20 
Ttreeview控件小问题,高手进,低手学IDNameParentID1a02b13c14d15e26f27g38h39i3.........如上是树表table1

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要实现这个功能的话,网上很多这个例子,

热点排行