如何构造树

shanliying 2003-12-18 08:27:50
我得库结构如下
ID,NAME,ParentID,
ID是编号,parentID是父亲得ID;
把name构造成树,怎么一层层构造下去?
...全文
22 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
tanqth 2003-12-18
有一个DBTREE,很好用,是我自己作的,你可放心使用,
www.myjinsui.com/down
回复
DelphiBird 2003-12-18
由根节点开始构造,构造过程中第归构造到没个子孙节点
//构造根
procedure TMain.RootTree(treeview1:ttreeview);
var
NodeTemp : TTreeNode;
pstr : ^string;
Query:TADOQuery;
begin
Query:=TADOQuery.Create(self);
query.Connection:=BgConnection;
try
Treeview1.Items.BeginUpdate;
with query do
begin
SQL.Text :='select top 1 * from xzdm order by xcode';
open;
sort:='xcode';
if isempty then exit;
NodeTemp := nil;
while not eof do
begin
new(pstr);
pstr^ := FieldByName('key').AsString;
NodeTemp :=treeview1.Items.AddObject(nil,
trim(FieldByName('xname').AsString)+'('+fieldbyname('xcode').AsString+')', pstr);
Next;
end;
end;
while NodeTemp <> nil do
begin
CreateTree(Query, NodeTemp,treeview1);
NodeTemp:=NodeTemp.getPrevSibling;
end;
treeview1.Items.EndUpdate;
finally
Query.Free;
end;
end;

//构造树
procedure TMain.CreateTree(QuerySource:TADOQuery;NodeParent:TTreeNode);
var
pstr1, pstr2 : ^string;
NodeTemp : TTreeNode;
begin
pstr1 := NodeParent.Data;
with QuerySource do
begin
close;
sql.Clear;
sql.Text:='SELECT key,xcode,xname FROM xzdm WHERE parent = ' + '''' + pstr1^ + '''';
open;
if isempty then exit;
NodeTemp := nil;
while not eof do
begin
new(pstr2);
pstr2^ := FieldByName('key').AsString;
NodeTemp := TreeView1.Items.AddChildObject(NodeParent,
trim(FieldByName('xname').AsString)+'('+fieldbyname('xcode').AsString+')', pstr2);
Next;
end;
end;
while NodeTemp <> nil do
begin
CreateTree(QuerySource,NodeTemp,treeview1);
NodeTemp := Nodetemp.getPrevSibling;
end;
end;
回复
发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1566

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告