关于NextGrid控件和cxTreeList控件中的子节点问题(未完待续)
来源:互联网 发布:jre 7u9 windows 64 编辑:程序博客网 时间:2024/06/04 19:00
关于NextGrid控件和cxTreeList控件中的子节点问题
本文来自http://blog.csdn.net/jqandjq ,引用必须注明出处
本文章主要讨论NextSuit控件套件中的NextGrid控件和Express控件套件中的cxTreeList控件中关于子节点使用的不同点,以及转换方式,并着重于NextGrid到cxTreeList控件的转换。
NextGrid和cxTreeList对于子节点的管理方式是有很大的不同的,NextGrid作为一个GRID,它是一个比较整体的部分,一个列的所有行可以看成是整体。cxTreeList作为TreeList它更看重于对TREE的管理,他用的便是以结点的方式,每一个行可以看作是一个节点用cxTreeList的表达是一个ITEM项。
对于子节点的插入,NextGrid用的是直接插入方式,如:NextGrid1.AddChildRow(n);其中n是Grid的位置,即插入的是在Grid的n-1行节点的孩子。再看cxTreeList,用的是对某个节点进行操作的方式,即:cxTreeList1.AddChild(cxTreeList1.Items[n]);插入的位置便是节点cxTreeList1.Items[n]的子位置,或用:cxTreeList1.Items[n].AddChild,需要注意的是,这里的N和NextGrid的N并不是同一个概念,并不能做简单的替换。因为NextGrid在计算位置的时候直接包含了所有层面上的节点,即包括子节点,而cxTreeList1.Items[n]只是表示第一层的第n个节点。
了解它们大致的结构,我们开始要对它们获取子节点个数的函数展开讨论。NextGrid获取子节点数的方式主要是用NextGrid1.GetChildCount(i),这里的i是NextGrid的位置,得到的是这个节点的所有的子节点数,注意,是包含所有的子节点的,包括子节点的子节点。而cxTreeList获得子节点数的方式主要是用cxTreeList1.Items[i].ChildVisibleCount或cxTreeList1.Items[i].Count,这里的i也仅表示第一层的节点的位置,得到的结果是该节点的下一级子节点数(不包含下下级)。
现在我们有一个PROJECT用的是NextGrid控件,但由于某种原因,我们需要把他改用成cxTreeList,那么对于子节点的操作应该是最大的改造。比如获取所有的子节点数,我们需要做一个GetChildCount,实现和NextGrid1.GetChildCount(i)同样的功能。
我们遇到的问题是cxTreeList1.Items[i].ChildVisibleCount得到的只是下一级的节点,也就说更深的级我们是看不到的,于是我们或许需要写个深度搜索来解决这个问题。先用深搜来通过i找到这个要找的节点是哪个节,再深搜得到这个节点的子节点个数,还有另一种思想就是计算下一个非子辈节点位置和当前的位置的差,但是会有几种情况出现:
1. 下一个是同级节点
2. 下一个是高级(父辈)节点
3. 下一个是NULL,即没有下一个大于等于该级别的结点
幸运的事,cxTreeList已经帮我们封装了按深度优先搜索顺序得到下一个节点的函数,cxNode := cxNode.GetNext;这减轻了我们的工作量,我们只需要“线性”遍历,而不用递归,因为递归相对来说易出错且难以调试。我们得到第i个节点之后,现在的难点是如何得到这个节点的所有层的子节点。按解题复杂度,我们还是先考虑非递归的方法,按测试先行我们必须要设计出以上三点的三种测试用例。现在我们设计一个找非子辈节点的方式。
Index = node.index;
While(node <> root)
{
nodeParent := node. Parent;
node := node. getNextSibling // 找下一个兄弟
if (node <> nil) // 有下一个兄弟
{
NextIndex = node.Index;
break;
}
node := nodeParent; // 没下一个兄弟,去找父亲节点
}
if (node == root)
NextIndex = cxTreeList.Last. Index + 1;
Result = NextIndex – Index;
- 关于NextGrid控件和cxTreeList控件中的子节点问题(未完待续)
- 关于DOM和节点的问题(未完待续...)
- 封装控件的原理[未完待续]
- 第三方实用控件 未完待续
- C++中的set_new_handler和new_handler 【未完待续】
- java中的线程和进程-未完待续
- 获取窗口、控件等指针。(未完待续)
- Android_关于子控件和父控件的事件响应问题
- Android_关于子控件和父控件的事件响应问题
- (4.4.14.1)Android_关于子控件和父控件的事件响应问题
- android关于Listview中定义了子控件,子控件和item同时获取焦点的问题
- 关于对话框和控件问题
- 关于eclipse中的使用小常识(未完待续)
- 关于Mysql的死锁问题(未完待续)
- 我的分页控件(未完,待续)——控件件介绍及思路
- 我的分页控件(未完,待续)——控件件介绍及思路
- PC客户端中的网页----问题集合(未完待续)
- 关于android.location 和 android.graphics包下类(未完待续)
- 一种NoSQL实现
- 页面刷新时让滚动条不变
- Java设计模式之策略模式
- 开机玩游戏后图标显示不正常的解决办法
- UPNP设备结构-Chinese
- 关于NextGrid控件和cxTreeList控件中的子节点问题(未完待续)
- 使用网页抓取技术获取自己World Community Grid任务信息的经历
- @echo off用法
- Android入门教程(五)之------第一个Android工程HelloAndroid
- 第一次来这里!
- 创新驱动未来,浪潮持续深耕信息安全市场
- MySQL.com被SQL注入攻击,用户密码数据被公布
- 轉:SAP ABAP 物料主数据增加字段
- 基于Jdk1.5可中止制定线程的线程池简单扩展