zoukankan      html  css  js  c++  java
  • Winform Treeview 的按需加载

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

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

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

     

      1: List<string> m_Departments = new List<string>() { "湖北.黄石", "湖北.鄂州", "湖北.武汉" };
    
      2: private void AddDepartMents(List<string> departments)
    
      3: {
    
      4:     if (m_Root == null)
    
      5:     {
    
      6:         var root = departments[0].Split('.')[0];
    
      7:         m_Root = new TreeNode(root);
    
      8:         m_Root.Tag = root;
    
      9:         treeView1.Nodes.Add(m_Root);
    
     10:     }
    
     11: 
    
     12: 
    
     13:     foreach (var department in departments)
    
     14:     {
    
     15:         var parent = m_Root;
    
     16:         var dts = department.Split('.');
    
     17:         for (int i = 1; i < dts.Length; i++)
    
     18:         {
    
     19:             if (!m_OrgNodeManager.ContainsKey(dts[i]))
    
     20:             {
    
     21:                 var child = new TreeNode(dts[i],1,1);
    
     22:                 child.Tag = dts[i];
    
     23:                 child.ToolTipText = department;
    
     24:                 m_OrgNodeManager.Add(dts[i], child);
    
     25:                 parent.Nodes.Add(child);
    
     26:                 parent = child;
    
     27:             }
    
     28:         }
    
     29: 
    
     30:         parent.Nodes.Add("");
    
     31:     }
    
     32: }

     

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

     

    2. 实现BeforeExpand事件

      1: private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
    
      2: {
    
      3:     TreeNode curentNode = e.Node;
    
      4:     if (curentNode.ImageIndex == 1)
    
      5:     {
    
      6:         curentNode.Nodes.Clear();
    
      7:         foreach (var user in m_UserManager)
    
      8:         {
    
      9:             if (user.Value.ToString() == curentNode.ToolTipText.ToString())
    
     10:             {
    
     11:                 TreeNode userNode = new TreeNode(user.Key);
    
     12:                 curentNode.Nodes.Add(userNode);
    
     13:             }
    
     14:         }
    
     15:     }
    
     16: }
  • 相关阅读:
    剑指offer题解(python版)(更新到第16题)
    Java基础知识详解:值传递
    [LeetCode] 583. Delete Operation for Two Strings
    [LeetCode] 856. Score of Parentheses
    [LeetCode] 1129. Shortest Path with Alternating Colors
    [LeetCode] 1561. Maximum Number of Coins You Can Get
    [LeetCode] 1052. Grumpy Bookstore Owner
    [LeetCode] 991. Broken Calculator
    [LeetCode] 1054. Distant Barcodes
    [LeetCode] 1245. Tree Diameter
  • 原文地址:https://www.cnblogs.com/fengwenit/p/4027373.html
Copyright © 2011-2022 走看看