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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值