Ttreeview控件小疑点,低手学
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
让它升成一个树。
要求:不要用递归!!!
求解!!!
------解决方案--------------------
未测试,应该没错
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要实现这个功能的话,网上很多这个例子,