程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Winform Treeview 的按需加載,winformtreeview

Winform Treeview 的按需加載,winformtreeview

編輯:C#入門知識

Winform Treeview 的按需加載,winformtreeview


最近項目裡用到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: }

C# winform開發中,如果treeview的節點太多,導致加載很慢,怎做可以提給效率?

你可以選擇分配加載,即先加載父節點類型的數據,然後點擊展開按鈕的時候再加載子節點的數據。
 

c# winform開發,treeview動態加載大量節點(100萬)時,怎提高效率?

你應該不可能一次去加載並顯示這100萬節點吧,只在需要顯示出來的時候,去加載需要顯示的數據就行了(比如說屏幕上一次只能顯示20項數據,那只讀取創建這二十條就行了)。如果一定需要一次加載大量數據,那象多線程之類就可以考慮了,如果等待時間較長,象進度條之類也是要做的。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved