• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi 根据数据库结构生成TreeView - 癫狂编程

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

delphi 根据数据库结构生成TreeView

procedure TUIOperate.FillTree(treeview: TTreeView);
var
  findq: TADOQuery;
  node: TTreeNode;

  //这个方法是根据记录的id字段值,查找TreeView上的父节点
  function FindParentNode(id:Integer):TTreeNode;
  var
    i:Integer;
  begin
    Result := nil;
    for i := 0 to treeview.Items.Count - 1 do
    begin
      //比较Node的Data值和记录的id值
      if Integer(treeview.Items[i].Data) = id then
      begin
        Result := treeview.Items[i];
        Break;
      end;
    end;
  end;

begin
  findq := TADOQuery.Create(nil);
  findq.Connection := controler.DataConnect.Connection; //这里的Connection指向你的数据连接
  try
    treeview.Items.BeginUpdate;
    treeview.Items.Clear;
    //选出所有记录,并按parentid排序,这样可以保证先添加顶级节点,在下级记录添加时,总能找到父节点
    findq.SQL.Text := \'SELECT * FROM [Catalog] order by parentid,id\';
    findq.Open;
    while not findq.Eof do
    begin
      //如果是最顶级,直接添加到Treeview
      if findq.FieldByName(\'parentid\').AsInteger = -1 then
        //将id值,保存在Node的Data中,以便查找用
        treeview.Items.AddObject(nil,findq.FieldByName(\'CatalogName\').AsString,Pointer(findq.FieldByName(\'id\').AsInteger))
      else
      begin
        //查找上级节点
        node := FindParentNode(findq.FieldByName(\'parentid\').AsInteger);
        if node <> nil then
          treeview.Items.AddChildObject(node,findq.FieldByName(\'CatalogName\').AsString,Pointer(findq.FieldByName(\'id\').AsInteger));
      end;
      findq.Next;
    end;
  finally
    findq.Free;
    treeview.Items.EndUpdate;
  end;
end;
 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
matlab启动图标发布时间:2022-07-18
下一篇:
UbuntuMatlab2010安装,中文乱码与桌面启动器解决方案发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap