本文實例講述了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#程序設計有所幫助。