1、使用事件tvHeLiuDM_BeforeExpand(object sender, TreeViewCancelEventArgs e)在展開節點時發生
2、使用事件tvHeLiuDM_AfterCollapse(object sender, TreeViewEventArgs e)在摺疊節點時發生
3、如標題,想要在節點Expand發生時才加載下級節點的數據控制需要在beforeExpand事件(支持點擊圖片展開和雙擊節點展開)中添加想要的邏輯:
示例代碼如下:
void tvHeLiuDM_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (e.Action == TreeViewAction.Unknown)
return;
if (e.Node == null || e.Node.Tag == null || !e.Node.Tag.ToString().Equals(要加載節點的tag標誌))
return;
if (e.Node.Nodes.Count == 1)//如果當前節點有且僅有一個,且爲默認節點時清除該節點,否則無需重新加載數據
{
if (e.Node.Nodes[0].Text.Trim().Equals(DEFAULTNODENAME))
e.Node.Nodes.Clear();
else
return;
}
if (e.Node.Nodes.Count > 1) //如果當前節點下已經加載過數據,無需重新加載數據
return;
AddChildrenToParentNode(e.Node);//加載節點的數據
}
void tvHeLiuDM_AfterCollapse(object sender, TreeViewEventArgs e)
{
if (e.Action == TreeViewAction.Unknown)
return;
if (e.Node == null && e.Node.Tag == null || !e.Node.Tag.ToString().Equals(HELIUTAG))
return;
if (e.Node.Nodes.Count == 0)
e.Node.Nodes.Add(DEFAULTNODENAME);//摺疊時添加默認節點,提示用戶節點可以展開
}
4、這裏需要注意的,我們的目標是不想再開始就加載數據,所以在初始控制節點展開的時候需要注意:
如:
我們默認需要展開的是根節點下的第一級節點,所以我們會用到rootNode.Expand();這個方法(展開當前節點的下一級節點),
但是我們觀察發現,第一級節點下的數據也被加載了(即展開根節點時,第一級節點也調用了Expand()方法),因爲默認如果第一級
節點是不折疊的。所以,我們需要:
firstNode.Collapse();
rootNode.Nodes.Add(firstNode);
rootNode.Expand();
即可實現。