Winform中Treeview实现按需加载的方法

 更新时间:2014年10月16日 08:57:06   投稿:shichen2014  
这篇文章主要介绍了Winform中Treeview实现按需加载的方法,针对大数据量的情况下非常具有实用价值,需要的朋友可以参考下

本文实例讲述了Winform中Treeview实现按需加载的方法,非常具有实用价值。分享给大家供大家参考。具体分析如下:

最近项目里用到treeview,原先设计的是一开始就把所有数据都加载到treeview里,后来发现客户的数据量实在太大,加载所有数据要2分钟,这个是客户没法接受的。后来就考虑到用户也不是一开始就要看所有的数据,用户也是一层一层地展开,所以我们就考虑是不是可以实现以当用户展开某个结点时才加载当前结点下面的数据。一番查找后,发现treeview有BeforeExpand事件可以实现我们的需求。

下面介绍具体的实现代码:

1. 首先只加载各部门(结点)的信息

复制代码 代码如下:
List<string> m_Departments = new List<string>() { "湖北.黄石", "湖北.鄂州", "湖北.武汉" };
private void AddDepartMents(List<string> departments)
{
     if (m_Root == null)
     {
         var root = departments[0].Split('.')[0];
         m_Root = new TreeNode(root);
         m_Root.Tag = root;
         treeView1.Nodes.Add(m_Root);
     }
     foreach (var department in departments)
     {
         var parent = m_Root;
         var dts = department.Split('.');
         for (int i = 1; i < dts.Length; i++)
         {
             if (!m_OrgNodeManager.ContainsKey(dts[i]))
             {
                 var child = new TreeNode(dts[i],1,1);
                 child.Tag = dts[i];
                 child.ToolTipText = department;
                 m_OrgNodeManager.Add(dts[i], child);
                 parent.Nodes.Add(child);
                 parent = child;
             }
         }
         parent.Nodes.Add("");
     }
}

这里要注意,每个结点加完后,要加上一个空的子结点parent.Nodes.Add(""); 不然就没有那个加号让你点了。

2. 实现BeforeExpand事件

复制代码 代码如下:
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
     TreeNode curentNode = e.Node;
     if (curentNode.ImageIndex == 1)
     {
         curentNode.Nodes.Clear();
         foreach (var user in m_UserManager)
         {
             if (user.Value.ToString() == curentNode.ToolTipText.ToString())
             {
                 TreeNode userNode = new TreeNode(user.Key);
                 curentNode.Nodes.Add(userNode);
             }
         }
     }
}

希望本文所述对大家的C#程序设计有所帮助。

相关文章

  • C#面向对象设计原则之开闭原则

    C#面向对象设计原则之开闭原则

    这篇文章介绍了C#面向对象设计原则之开闭原则,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C#获取硬盘序列号的问题小结

    C#获取硬盘序列号的问题小结

    本文给大家分享C#获取硬盘序列号的问题及解决方法,非常不错,需要的朋友参考下
    2016-12-12
  • .NET实现父窗体关闭而不影响子窗体的方法

    .NET实现父窗体关闭而不影响子窗体的方法

    这篇文章主要介绍了.NET实现父窗体关闭而不影响子窗体的方法,很实用的功能,需要的朋友可以参考下
    2014-08-08
  • C# .NET实现扫描识别图片中的文字

    C# .NET实现扫描识别图片中的文字

    本文以C#及VB.NET代码为例,介绍如何扫描并读取图片中的文字。文中的示例代码介绍详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起学习一下
    2021-12-12
  • 一文弄懂C#浅克隆与深克隆

    一文弄懂C#浅克隆与深克隆

    在C#中,浅克隆和深克隆是两种常见的对象克隆技术,本文主要介绍了C#浅克隆与深克隆,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • C# 添加、修改和删除PDF书签的实例代码

    C# 添加、修改和删除PDF书签的实例代码

    本篇文章主要介绍了C# 添加、修改和删除PDF书签的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • C# OpenCvSharp实现通过特征点匹配图片

    C# OpenCvSharp实现通过特征点匹配图片

    这篇文章主要为大家详细介绍了C#如何结合OpenCVSharp4实现通过特征点匹配图片,文中的示例代码简洁易懂,具有一定的学习价值,需要的小伙伴可以参考下
    2023-11-11
  • C#备忘录人生存档的设计模式实例

    C#备忘录人生存档的设计模式实例

    这篇文章主要为大家介绍了C#设计模式中备忘录模式的实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • C#使用正则表达式

    C#使用正则表达式

    这篇文章介绍了C#使用正则表达式的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C# 静态变量与静态方法实例研究

    C# 静态变量与静态方法实例研究

    写了一个翻译英汉单词辞典的小程序,发现在调用几千次的时候速度很慢
    2011-11-11

最新评论