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: }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM