您的位置:首页 > 编程语言 > Delphi

树结构数据装入delphi的TTreeview组件中

2006-02-21 10:33 274 查看
树结构数据装入delphi的TTreeview组件中

数据库结构

Create table zhibiaotb (id int primary key,name varchar(100),type int ,upid int)

首先定义 树结点的结构:

TUnitNodeInfo = record
ID: integer;
Name: string;
unitType: integer;
Upid: integer;
end;

PUnitNodeInfo = ^TUnitNodeInfo;

装入过程:

procedure Tfrminput.CreateTree(TreeNode: TTreeNode; Upid: integer; xtype: integer);
var
I: integer;
PNodeInfo: PUnitNodeInfo;
TmpTreeNode: TTreeNode;
ID: integer;
Tmpid: integer;
TmpUpid: integer;
mtype: integer;
begin
ADOQuery1.Filtered := false;
ADOQuery1.Filter := Format('upid=%d and type=%d', [Upid, xtype]);
ADOQuery1.Filtered := true;
ADOQuery1.First;
TmpTreeNode := TreeNode;//保存该递归层的节点位置,以便下层能返回上层
for I := 0 to ADOQuery1.RecordCount - 1 do
begin
TreeNode := TreeView1.Items.AddChild(TreeNode, ADOQuery1.FieldByName('name').AsString + '-' + ADOQuery1.FieldByName('ID').AsString);
New(PNodeInfo);//产生树结点关联数据
with PNodeInfo^ do
begin
ID := ADOQuery1.FieldByName('id').AsInteger;
Name := ADOQuery1.FieldByName('name').AsString;
unitType := ADOQuery1.FieldByName('type').AsInteger;
Upid := ADOQuery1.FieldByName('upid').AsInteger;
end;
TreeNode.Data := PNodeInfo;
Tmpid := ADOQuery1.FieldByName('id').AsInteger;//保存该层的数据
TmpUpid := ADOQuery1.FieldByName('upid').AsInteger;;//保存该层的数据

CreateTree(TreeNode, ADOQuery1.FieldByName('id').AsInteger, xtype);//递归建下级树结点

//从下层跳到上层

ADOQuery1.Filtered := false;
ADOQuery1.Filter := Format('upid=%d and type=%d', [TmpUpid, xtype]);
ADOQuery1.Filtered := true;
ADOQuery1.Locate('id', Tmpid, []);
TreeNode := TmpTreeNode;
ADOQuery1.Next;
end;

end;

调用示例:

try
Adocnn.Close;
Adocnn.Open;
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'Select id,name,type,upid from zhibiaotb';
ADOQuery1.Open;
TreeView1.Items.BeginUpdate;
CreateTree(nil, -1, 1);
CreateTree(nil, -1, 2);
CreateTree(nil, -1, 3);
TreeView1.FullExpand;
TreeView1.Items.EndUpdate;
except
end;

一点小技巧:

如果树结构数据来自两个表,则可以用union语法把两个表的数据组成一个树结构

Example:

Create table Depart (depid int,name,upid int)

Create table Member(Memberid int ,name name ,Depid int)

组成一个表如下:Select Depid as id,name,upid union select memberid as id,name,Depid as upid



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐