从数据库取数据,形成treeview.如何设计数据库表的字段,及建树算法.有人能提供代码吗?谢谢
解决方案 »
- 怎么在ListBox中加入数据?
- 为什么我delphi编译默认打开的程序,瑞星也报病毒?
- 如何用高级语言如delphi做mapinfo的二次开发,多谢各位了!
- delphi中用DLL连接数据库的问题!急!急!急!
- 请问如何实现单击高亮显示!!!!
- <2002-10-13 12:41:07Delphi6注册机>请OpenWork() DelphiFancier(Gordon) approach() 进来领分
- 高份请教:在DELPHI中如何判断电脑是否联上了INTERNET,是否断线啦.
- 如何控制edit框中输入的字符为0.00-9.99
- 在报表中怎样打印出memo字段的值,我用TQRdbrichedit好象不行
- *****另类的问题******,在windows98下我是否可以分给一个逻辑区20G
- com应用问题
- 进制的转换!
0101 城北区 01
010101 街道1 0101
0102 江南区 01
010201 街道1 0102
可以用递归了或者用Data指针的解决方法。
以下代码可以参考一下!用的是递归
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 ParID =' + 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;
用下面的用递归:应该可以了!procedure TQueryF.getChildText(CurrentNode: TTreeNode);
var
i: integer;
begin
if CurrentNode.HasChildren = False then Exit;
for i := 0 to CurrentNode.Count - 1 do
begin
ListBox1.items.add(CurrentNode.Item[i].Text);
getChildText(CurrentNode.Item[i]);
end;
end;
id:integer(自增)
name:varchar
pid:integer...
...
type
PNode=^TNode;
TNode=record
id:integer;
end;
...
...
procedure CreateTree;
var
pn1:pnode;
cnode:TTreeNode;
begin
TreeView1.Items.Clear;
new(pn1);
pn1.id:=0;
cnode:=TreeView1.Items.AddChildObject(nil,'组织机构',pn1);
with dm.Query1 do
begin
Close;
Sql.Clear;
Sql.Add('select id,name,pid from zzjg order by pid');
Open;
First;
while not eof do
begin
new(pn1);
pn1.id:=FieldByName('id').AsInteger;
for i:=0 to TreeView1.Items.Count-1 do
begin
if pnode(TreeView1.Items.Item[i].Data).id=FieldByName('pid').AsInteger then
begin
cnode:=TreeView1.Items.AddChildObject(TreeView1.Items.Item[i],FieldByName('name').AsString,pn1);
end;
end;
next;
end;
end;
end;