怎样动态生成一个树?数据结构如下(100分)

  • 主题发起人 主题发起人 cxreal
  • 开始时间 开始时间
C

cxreal

Unregistered / Unconfirmed
GUEST, unregistred user!
在数据库中有如下的数据结构
-------------------
id content type1 type2
A
B
C
-------------------
我想从右到左,以TPYE2为节点,TYPE1为TYPE2的子节点,content为TYPE1的子节点
请问怎么生成一个树?
 
其实你根本没必要把自己的数据结构做成这样,给你介绍一种更为合理的方法,
数据库格式为:(表名:Type)
ID ParentID Name
1 0 根目录
2 1 子项1
3 1 子项2
4 2 测试1
5 3 测试2
.....
树形显示为:
所有目录
根目录
子项1
测试1
子项2
测试2
....
程序实现如下:
procedure FillFolderTreeView(TreeView: TTreeView);
procedure CreateSubTree(FNodeName: string; Node: TTreeNode = nil);
var
mLocalName: string;
TreeNode: TTreeNode;
Ads_Tmp: TADODataSet;
begin
ADS_Tmp := TADODataSet.Create(Self);
ADS_Tmp.Connection := ADOConn;
with ADS_Tmp do
begin
Close;
CommandText := 'Select * from Type Where ParentID =' + FNodeName;
Open;
First;
while not Eof do
begin
mLocalName := FieldbyName('ID').Asstring;
TreeNode := TreeView.Items.AddChild(Node, FieldByName('Name').AsString);
CreateSubTree(mLocalName, TreeNode); //递归调用
Next;
end;
end;
end;
begin
TreeView.Items.BeginUpdate;
TreeView.Items.Clear;
with TreeView.Items.Add(nil, '所有目录') do
begin
ImageIndex := 1;
SelectedIndex := 1;
end;
CreateSubTree('0', TreeView.Items[0]);
TreeView.Items.EndUpdate;
TreeView.Items[1].Selected := True;
end;

我一直在用的,没问题,
哥们加分吧
 
数据表结构是不能改动的
在DBTreeViewEdit控件里看到过实现的
但没看懂 SIGH

谢谢
 
在type后添加
Ptype=^Ttype;
Ttype=record
id:integer;
parent_id:integer;
name:string;
end;
var
mytype:array of Ttype;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add('select ID,parent_id,name from type');
qry1.Open;
setlength(mytype,qry1.RecordCount);
i:=0;
while not (qry1.Eof) do begin
mytype.id:=qry1.Fields[0].AsInteger;
mytype.parent_id:=qry1.Fields[1].AsInteger;
mytype.name:=qry1.Fields[2].AsString;
i:=i+1;
qry1.Next;
end;
buildtree(nil,0);
end;

procedure TForm1.buildtree(thenode: TTreeNode; parentid: integer);
var
i:integer;
Pmytype:Ptype;
subnode:TTreeNode;
begin

for i:=0 to length(mytype)-1 do
if (mytype.parent_id=parentid) then begin
new(Pmytype);
Pmytype^.id:=mytype.id;
Pmytype^.parent_id:=mytype.parent_id;
Pmytype^.name:=mytype.name;
subnode:=treeview1.Items.AddChildObject(thenode,mytype.name,Pmytype);
buildtree(subnode,mytype.id)
end;
end;
这里用了一个递归
我以实现了

 
to xiaolin_nj: 你的和我想要的不一样

我的意思是象下面的这种表
--------------------------------
国家 省份 城市
中国 河北 石家庄
中国 河北 保定
.............
--------------------------------
中国---河北---石家庄
|__保定
 
多人接受答案了。
 
后退
顶部