博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
根据数据库结构生成RzCheckTree
阅读量:6278 次
发布时间:2019-06-22

本文共 1711 字,大约阅读时间需要 5 分钟。

现在大多数的方法是采用递归,但这种操作会频繁的去select数据库,降低了执行效率,稍微改动一些,效果会好不少,这里介绍一种方法,即一次性select出所有数据,然后按照ParentID排序,逐条添加到TreeView,添加前,先遍历TreeView,查找他的上一级节点,遍历Treeview可比select数据快啊,下面看代码: 数据表结构,最顶级parentid值我用的是-1,大家也可以用其他值,但要保证最顶级parentid值最小,层次越深,

  

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

 

转载于:https://www.cnblogs.com/win32pro/p/7771980.html

你可能感兴趣的文章
dangdang.ddframe.job中页面修改表达式后进行检查
查看>>
Web基础架构:负载均衡和LVS
查看>>
Linux下c/c++相对路径动态库的生成与使用
查看>>
SHELL实现跳板机,只允许用户执行少量允许的命令
查看>>
SpringBoot 整合Redis
查看>>
2014上半年大片早知道
查看>>
Android 6.0指纹识别App开发案例
查看>>
正文提取算法
查看>>
轻松学PHP
查看>>
Linux中的网络监控命令
查看>>
this的用法
查看>>
windows下安装redis
查看>>
CentOS7 yum 安装git
查看>>
启动日志中频繁出现以下信息
查看>>
httpd – 对Apache的DFOREGROUND感到困惑
查看>>
分布式锁的一点理解
查看>>
idea的maven项目,install下载重复下载本地库中已有的jar包,而且下载后jar包都是lastupdated问题...
查看>>
2019测试指南-web应用程序安全测试(二)指纹Web服务器
查看>>
树莓派3链接wifi
查看>>
js面向对象编程
查看>>