码迷,mamicode.com
首页 > 其他好文 > 详细

依据数据集 进行 树 的构造(treeview & dataset) 方法一

时间:2015-11-14 06:33:53      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:

type

  PDepData=^DepData;

  DepData = record

    ID: Integer;

    DepID: string;

    DepName: string;

  end;


procedure FreeTV(tv: TTreeview);

var

  i: Integer;

begin

  for i := 0 to tv.Items.Count - 1 do

  begin

    dispose(tv.Items[i].Data);

  end;

  tv.Items.Clear;

end;


procedure LoadTree(tv: TTreeview; dst: TDataset);

  function GetNodeData: PDepData;

  begin

    new(result);

    with result^ do begin

      ID := dst.FieldByName(‘ID‘).AsInteger;

      DepID := dst.FieldByName(‘DepID‘).AsString;

      DepName := dst.FieldByName(‘DepName‘).AsString;

    end;

  end;

var

  ParentNode, NewNode: TTreeNode;

  p: PDepData;

  found: Boolean;

  i: Integer;

begin

  FreeTV(tv); // 释放树视图

  dst.First;

  ParentNode := nil;

  while not dst.Eof do begin

    p := GetNodeData;

    found := false;

    for i := tv.Items.Count-1 downto 0 do begin // 找 双亲节点

      if pos(PDepData(tv.Items[i].Data).DepID, p.DepID) = 1 then begin

        ParentNode := tv.Items[i];

        found := true;

        break;

      end;

    end;

    if not found then begin // 未找到双亲节点,加到树根下

      ParentNode := tv.Items.Add(nil, p.DepName);

      ParentNode.Data := p;

    end else           // 找到双亲节点,加到双亲节点下

      tv.Items.AddChild(ParentNode, p.DepName).Data := p;

    dst.Next;

  end;

end;


procedure TForm1.Button1Click(Sender: TObject);

var

  t: Cardinal;

begin

  t := gettickcount;

  LoadTree(tv, MyQuery1);

  t := gettickcount - t;

  caption := inttostr(t);

end;



依据数据集 进行 树 的构造(treeview & dataset) 方法一

标签:

原文地址:http://my.oschina.net/u/582827/blog/530244

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!