浅析动态添加、删除、修改TreeView节点

本文探讨如何在WinForm应用中高效地处理TreeView控件的动态添加、修改和删除节点问题,避免全树重载,提高性能。通过判断节点深度并遍历找到对应节点进行操作,实现对工程、建筑物和点节点的精确更新。

 接着上一篇<<浅析TreeView绑定效率>>继续讲讲TreeView

在实际项目过程中,TreeView往往会动态的绑定数据,操作界面一旦新添加、修改、删除节点数据,在TreeView中要时时反映新添、被修改、被删除的节点,有的人会采取的方式是直接把树形控件重新加载一遍,这样是可以解决问题,但是随着数据量的增加,重新加载的付出代价很大!有没有好的方法只"刷新"单独新添加的、修改的、删除的节点,回答是有的,本文就这个问题和大家一起探讨下。

设计数据库:

数据表:工程信息表(ProjectInfo)、建筑物信息表(BuildingInfo)、点表(Point

关系如图:

WinForm项目

开发环境:VS2008 + SQL SERVER 2005

测试数据:本文的测试数据大家可以根据自己实际需求

步骤

1、新建winform项目DynamicTreeView

2、新建窗体frmDemo,从工具箱中拖一个splitcontainer控件,控件左边添加treeview控件,右边添加相应的按钮、文本框、下拉框;

3、按照我上篇文章"浅析TreeView绑定效率",绑定treeview控件

4、在窗体右边添加工程文本框及按钮,输入工程名,点击按钮就把新添加的工程文本添加到树形控件,而添加建筑物节点则是要根据建筑物所属工程添加对应的建筑物节点,同样的,添加点节点是要根据点所属的建筑物添加对应的点节点;

 

下面是添加节点功能的思路:

1、判断节点的深度,添加的是工程节点还是建筑物节点或是点节点,如果是工程节点,直接在树形控件下添加对应的工程节点,记得添加时要添加节点的tagtext

2、如果不是工程节点,而是建筑物节点或是点节点,使用foreach循环遍历整个树找到工程节点,然后再判断节点的深度,如果是建筑物节点,通过新添加所属工程tag与遍历工程节点进行匹配,匹配成功,直接匹配的工程节点下添加新的建筑物节点;

如果不是建筑物节点而是点节点,那再使用foreach循环遍历所有的建筑物节点,通过新添加点节点所属的建筑物的tag与遍历建筑物节点进行匹配,匹配成功,直接在匹配的建筑物节点下添加点节点;

    

 

          

           

下面是修改节点功能的思路:

1、遍历整个树,判断要修改节点的text的深度,如果是工程节点,就判断要修改节点的tag与遍历树得到的工程节点进行匹配,匹配成功直接把匹配成功节点的text改成为要修改的text

2、遍历工程节点,再判断修改节点的text的深度,如果是建筑物节点,那首先是要判断要修改节点的父节点与工程节点进行匹配,匹配成功则说明要修改的建筑节点就所属该工程,再判断要修改节点的tag与遍历的建筑物节点进行匹配,匹配成功直接把匹配成功节点的text改成为要修改的text

3、如果是判断为点节点,首先通过判断修改点节点父节点与遍历得到建筑物节点,定位要修改点节点的建筑物节点,然后遍历建筑物节点对应的点节点,判断要修改节点tag与得到的点节点的tag,匹配成功直接把匹配成功节点的text改成为要修改的text

    参考代码:

 

   

      

 

 

      删除节点功能的思路基本与修改节点的思路是一致的,不同的要判断下删除节点是否存在子节点,存在也把子节点删除;参考代码就不给出了!    

 

 

 

     http://download.youkuaiyun.com/source/2154913

     这个链接我给出了上述功能的完整代码,采用简单的三层架构+工厂模式做的,还有动态的添加右键菜单等功能,适合初学者学习,有兴趣的可以下下来看看,有问题可以call我!邮箱:chankcheng80y@sina.com

     欢迎大家讨论!!不足之处敬请原谅。

    

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值