最近在重构一个VB.NET2008编写的Mis系统,其中有一个用TreeView实现的四级目录,当时设计的是一次性加载目录,真是拙劣的设计!因为控件要加载的数据量较大,加载速度比较慢,故对此 进行了优化。
优化思路:初始状态仅加载前两级节点,每次点击控件展开节点时,再动态加载相应的下一级子节点
步骤:
1.控件展开触发事件
2.获取展开节点的Level
3.根据节点Level和Text或者ToolTipText进行查询,获得该节点对应下一级子节点的数据,
4.调用Add函数将子节点加入树中。
用到的方法:
控件展开触发事件:AfterExpand
获取当前节点:e.Node
现在要思考一个新的问题:每次点击展开都触发了添加节点事件,这样多次点击展开节点,怎样处理才能确保目录树正确?
我这里采取的策略是在节点展开事件中判断下一级的子节点是否为空,如果不空则表明子节点已经添加过,这种情况就要跳出事件,否则就开始执行添加子节点的程序
代码如下:
for each nowNode in e.Node.Nodes
dim testNode as TreeNode=nowNode
if testNode.Nodes.Count>0 then
return
end if
next