Treeview节点的动态实现,会的不难!!

麦子VISA 2005-06-30 12:21:34
我想根据库中表T_Group(code,name)来动态给frmmain窗体里Treeview创建节点

最多能创建4级子节点...

(以下数字均为数据表中记录code字段的值)

00 是根节点

01,02,03...是00的下级节点

0100...是01的节点的下级节点

010000 是0100的节点的下级节点

01000000 是010000的节点的下级节点

这样的规律,请问该如何实现啊~~!
...全文
139 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zklove 2005-06-30
  • 打赏
  • 举报
回复
这样创建树是最快最有效的方法,记录当前接点的位数,发现下条记录位数和当前的一样,就是同级,如果大于就是子接点,如果小于就是父接点的同级接点或者更高级接点 ,也就是说,对于一个接点,你最多保留它的三个父接点信息,加上自身信息.
在取数的时候ORDER BY CODE,那么结果就是
01
0100
010000
01000000
02
.
.
xiaoqlj 2005-06-30
  • 打赏
  • 举报
回复
用递归来做。
procedure TForm1.Show_TreeView(Code_Str: String; nNode: TTreeNode);
var
FriendNode :TTreeNode;
TreeQuery :TADOQuery;
MyRecordPointer :PGroupRecord;
begin
TreeQuery:=TADOQuery.Create(nil);
TreeQuery.Connection:=ADOConnection1;
TreeQuery.Close;
TreeQuery.SQL.Clear;
TreeQuery.SQL.Add('select code,name from table1 where code like '''+Code_Str+'''');
TreeQuery.Open;
WHILE NOT TreeQuery.Eof DO
BEGIN
New(MyRecordPointer);
MyRecordPointer.code:=TreeQuery.FieldByName('code').AsString;
MyRecordPointer.name:=TreeQuery.FieldByName('name').AsString;
FriendNode:=Treeview.Items.AddChildObject(nNode,MyRecordPointer.code,MyRecordPointer);
Show_TreeView(MyRecordPointer.code+'__',FriendNode);
TreeQuery.Next;
END;
end;


记得定义记录
type
PGroupRecord =^TGroupRecord;
TGroupRecord =record
code :String;
name :String;
end;

5,388

社区成员

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

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