首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视 ┆淘宝手机在线充值 ┆淘宝游戏点卡充值 
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>WINFORM>winform如何保持TreeView节点展开和折叠的状态
winform如何保持TreeView节点展开和折叠的状态
来源: 发布时间:2008-05-15 发布人: 浏览: 人次   字体: [ ]  

winform中用到了TreeView,数据更新时需要对TreeViewNodes进行相应的更新(增删改).如果直接对TreeView进行操作,非常的麻烦,因为数据是以DataSet的形式从服务器上取得的,直接操作就要先遍历TreeView,处理删除和修改过的节点,然后遍历DataSet,处理新增加的节点.这里最大难点是TreeNodeDataSet中数据的对应关系.最后还是放弃了这个方法,我选择了先把所有Nodes清空掉,然后重新添加Nodes.这样的又带来一个问题,如何保持原TreeView的状态.这里的状态指节点的展开和折叠以及选中的节点.

解决:
       我使用Hashtable来保存每个节点的状态.在把所有Nodes清空掉之前遍历TreeView,取得每个节点的状态,然后根据DataSet重新添加Nodes,添加完成后得根据刚才建立的Hashtable信息来设置每个节点的状态.

 代码:
重新添加节点

  private void Rebuild()
        {
            
            GetTreeNodesStatus(treeView1.Nodes);
            treeView1.Nodes.Clear();
            TreeNode node1 
= new TreeNode("Node1");
            node1.Nodes.Add(
new TreeNode("Node1 1 "));
            node1.Nodes.Add(
new TreeNode("Node1 2 "));
            node1.Nodes.Add(
new TreeNode("Node1 3 "));

            TreeNode node2 
= new TreeNode("Node2");
            node2.Nodes.Add(
new TreeNode("Node2 1 "));
            node2.Nodes.Add(
new TreeNode("Node1 2 "));

            TreeNode node3 
= new TreeNode("Node3");

            treeView1.Nodes.Add(node1);
            treeView1.Nodes.Add(node2);
            treeView1.Nodes.Add(node3);
            SetTreeNodesStatus(treeView1.Nodes);
        }

 

保存TreeNode状态
 private void GetTreeNodesStatus(TreeNodeCollection nodes)
        {
            
foreach (TreeNode node in nodes)
            {
                
if (node.IsExpanded)
                {
                    NodesStatus[node.FullPath] 
= true;
                }
                
else
                {
                    NodesStatus.Remove(node.FullPath);
                }
                
if (node.IsSelected)
                {
                    SelectNodeFullPath 
= node.FullPath;
                }
                GetTreeNodesStatus(node.Nodes);
            }
        }

设置TreeNode状态
       private void SetTreeNodesStatus(TreeNodeCollection nodes)
        {
            
foreach (TreeNode node in nodes)
            {
                
if (NodesStatus[node.FullPath] != null)
                {
                    node.Expand();
                }
                
if (node.FullPath == SelectNodeFullPath)
                {
                    treeView1.SelectedNode 
= node;
                }
                SetTreeNodesStatus(node.Nodes);
            }
        }


相 关 文 章   发布商链接
·WinForm中TextBox控件循环自动滚动示...
·asp.net中当按下回车键时响应处理按...
·winform实现类似QQ滑动面板的效果,附...
·WinForm实现渐变窗体效果代码
·winform实现的仿Msn移动提示信息窗口
·在.net中利用webbrowser控件实现WinF...
·winform实现窗体嵌入并操作可视化Exc...
·WNFORM实现窗体的DataGrid控件刷新
·WINFORM实现的用于拖放操作和文件复...
·WinForm下ListBox控件“设置DataSour...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·解决winform得不到GridView控
·winform实现窗体嵌入并操作可
·winform实现的仿Msn移动提示...
·WinForm实现渐变窗体效果代码
·winform实现类似QQ滑动面板的
·asp.net中当按下回车键时响应
·WinForm中TextBox控件循环自...
·图解winform用户控件添加自定
·dataset.GetChanges()为什么...
·winform中DatagridView单元格
·WebBrowser中html元素如何触...
·winform中如何获得TextBox光...
·winform中通过设置钩子监视鼠
·Winform获取弹窗消息框中的文
·WinForm实现注册热键的代码
热 门 文 章
·asp.NET实现视频播放器功能代...
·winform中DatagridView单元格...
·在.net中利用webbrowser控件...
·使用C#制做进程监视器,可查看...
·WinForm编程开发实用技巧14则
·C#的简单图片透明处理代码以...
·如何实现winform自动点击webb...
·winform实现类似QQ滑动面板的...
·如何做winform启动页面?
·图解winform用户控件添加自定...
·winform中如何获得TextBox光...
·Winform窗体之间传值的几种方...
·DataGridView控件如何实现分...
·asp.net中当按下回车键时响应...
·C#实现在Windows应用程序中支...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .