数据库结构
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
delphi TTreeView
猜你喜欢
转载自blog.csdn.net/u010237107/article/details/41038199
今日推荐
周排行