一个树使用的实例,仅供参考..
最近在网上看到很多人问TREEVIEW的使用方法,当然,例子代码也非常多,这是我之前写的,将以下代码贴出来,抛砖引玉,仅供参考一下,
本人水平有限,只能实现一些简单的功能...各位牛人别拍砖啊..-_-...
注: 在 FormShow 中的 Filter 只是为了进行权限判断,只加载具备条件的节点,少了一段代码,就是在保存之后插入一个
节点和数组元素...
--------------------------------------------------------------------------------------------
表结构:
dp_companytype dp_company
------------------------------------------------------------------
Coid char Companytypeid int
Companytypeid int parentid int
AreaID int
isopen bit
name char
数据:
dp_companytype dp_company
_________________________________________________ ____________________________________________
parentid | Companytypeid | Areaname Companytypeid | coid | isopen | name
_________________|__________________|____________ _________________|______|_________|_________
0 | 1 | 华南区 1 | 001 | 1 | test1
_________________|__________________|____________ _________________|______|_________|_________
1 | 2 | 广东省 2 | 002 | 0 | test2
_________________|__________________|____________ _________________|______|_________|_________
2 | 3 | 深圳市 3 | 003 | 0 | test3
_________________|__________________|____________ _________________|______|_________|_________
2 | 4 | 广州市 5 | 004 | 1 | test4
_________________|__________________|____________ _________________|______|_________|_________
3 | 5 | 福田区 4 | 005 | 1 | test5
_________________|__________________|____________ _________________|______|_________|_________
6 | 006 | 1 | test6
_________________|______|_________|_________
------------------------------------------------------------------------------------------------------------
1.树节点添加流程:
(1) 首先从 dp_companytype 表中加载出所有的地区,形成一个一级节点,AddParentNode过程
所有区域
|
|---华南区
| |
| |___广东省
| | |
| | |___广州市
| | |
| | |
| | |
| | |___深圳市
| | | |
| | | |---福田区
| | | |
(2) 之后再从 dp_company 表中查询 Companytypeid 与 dp_companytype 表中 Companytypeid 相同的记录,将其添加到相应的区域下
AddChildNode(ChildNode:TTreeNode;nCompanytypeid:integer;Isparentid:boolean);
参数说明 : 1.新增子节点的父节点,2.查找的二级节点ID,3.该节点是否无父节点
(3) dp_company 表中有些 Companytypeid 在 dp_companytype 中不存在,当然也要加载到树上,作为单独的一个二级节点添加
(4) 添加最后一级节点,即 dp_company中的节点
SelectCoid(aChildNode,aChildquery.fieldbyname('Companytypeid').AsInteger); //添加相应的店名
(5) 最后形成的节点应该是:
所有区域
|
|---华南区
| |
| |___test1
| |
| |___广东省
| | |
| | |___test2
| | |
| | |___广州市
| | | |
| | | |___test5
| | |
| | |___深圳市
| | | |
| | | |___test3
| | | |
| | | |---福田区
| | | | |
| | | | |---test4
| | | | |
|__________________________test6 (由于它的companytypeid 在 dp_companytype中不存在,故将它加到一级子节点上)
当然程序有根据 isopen 将相应的节点差色(最后一级子节点),
之后就是数据操作,比如修改 dp_company 中 Companytypeid 的值,则将相应的记录移动别的节点上,为了使数据和界面分隔,将代码写在
datasource 的DataChange 事件中