treeview控件的Expand事件下加載數據的控制

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();

即可實現。

發佈了66 篇原創文章 · 獲贊 5 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章