Ttreeview控件小问题,高手进,低手学

lcmlhs2005 2012-03-15 10:37:16
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
让它升成一个树。
要求:不要用递归!!!
求解!!!
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcmlhs2005 2012-03-16
  • 打赏
  • 举报
回复
我用的是cxTreeView这个控件呀,怎么弄?
我看见佛 2012-03-15
  • 打赏
  • 举报
回复
如果是从数据库读取出来的话,用DEV系列控件CXTREELIST的话不用写一句代码,只需要设置
KeyFields: 子节点ID

DisplayFields:节点显示内容

ParentFields:父节点ID

就可以了,treeview要实现这个功能的话,网上很多这个例子,
kaikai_kk 2012-03-15
  • 打赏
  • 举报
回复
未测试,应该没错

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;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧