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# lambda表达式原理定义及实例详解

    C# lambda表达式原理定义及实例详解

    这篇文章主要介绍了C# lambda表达式原理定义及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • C#调用C++使用C++/CLI的实现

    C#调用C++使用C++/CLI的实现

    在C#开发过程中,我们可能会遇到需要调用Windows API 或是第三方库的场景,本文主要介绍了C#调用C++使用C++/CLI的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • C#实现简单的loading提示控件实例代码

    C#实现简单的loading提示控件实例代码

    本文通过实例代码给大家介绍了C#实现简单的loading提示控件功能,代码非常简单,具有参考借鉴价值,需要的朋友参考下吧
    2017-09-09
  • C#中使用闭包与意想不到的坑详解

    C#中使用闭包与意想不到的坑详解

    这篇文章主要给大家介绍了关于C#中使用闭包与意想不到的坑,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-06-06
  • C#动态加载组件后如何在开发环境中调试详解

    C#动态加载组件后如何在开发环境中调试详解

    这篇文章主要给大家介绍了关于C#动态加载组件后如何在开发环境中调试的相关资料,文中通过图文介绍的非常详细,对大家的学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • C#程序中创建、复制、移动、删除文件或文件夹的示例

    C#程序中创建、复制、移动、删除文件或文件夹的示例

    这篇文章主要介绍了C#程序中创建、复制、移动、删除文件或文件夹的示例,即对System.IO命名空间中类的运用,需要的朋友可以参考下
    2016-02-02
  • C# 使用Fiddler捕获本地HttpClient发出的请求操作

    C# 使用Fiddler捕获本地HttpClient发出的请求操作

    这篇文章主要介绍了C# 使用Fiddler捕获本地HttpClient发出的请求操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • C#实现更快读写超级大文件的方法详解

    C#实现更快读写超级大文件的方法详解

    这篇文章主要来和大家介绍一下C#实现更快读写超级大文件的方法,文中的示例代码简洁易懂,对我们深入了解C#有一定的帮助,快跟随小编一起学习起来吧
    2023-06-06
  • 实例讲解C#中的职责链模式

    实例讲解C#中的职责链模式

    这篇文章主要介绍了C#中的职责链模式的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 详解C#如何实现分割视频

    详解C#如何实现分割视频

    这篇文章主要为大家详细介绍了C#如何实现将视频文件分割成一帧帧图片的方法,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12

最新评论