treeview控件的Expand事件下加载数据的控制

来源:互联网 发布:linux中mkdir命令 编辑:程序博客网 时间:2024/05/12 02:02

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

即可实现。