zoukankan      html  css  js  c++  java
  • Windows Form TreeView 上逐层加载数据

          TreeView 是一个很好的表达树形结构的控件。如果要加载的数据比较多的话,就需要逐层加载数据。要实现逐层加载数据,首先想到的就是TreeView 的 BeforeExpand 事件,它在节点展开前触发。但问题是BeforeExpand 事件每次展开时都会触发。有没有只在首次展开才触发的事件呢,可惜没找到。没关系,我们自定义一个 TreeView 节点类,给它加一个是否首次被展开的属性。
        /// <summary>
        
    /// 自定义节点类,继承于系统的 TreeNode 类
        
    ///   自定义节点类的目的就是给节点增加一个 IsFirstExpand 属性
        
    /// </summary>
        public class DirNode : TreeNode
        {
            
    // 该节点是否首次被展开
            private bool isFirstExpand = true;

            
    public DirNode() : base()
            {}

            
    public DirNode(string text) : base(text)
            {}

            
    /// <summary>
            
    /// 该节点是否首次被展开
            
    /// 因为 TreeNode 没有该属性,那我们自己定义吧!
            
    /// </summary>
            public bool IsFirstExpand
            {
                
    get { return isFirstExpand; }
                
    set { isFirstExpand = value; }
            }
        }

    自定义 TreeView 节点类有了“是否首次被展开”的属性之后,逐层展开 TreeView  节点的算法如下:
       1)   在 Form_Load 时,先加载前两层节点(只是加载,不用展开)。
       2)   在 BeforeExpand 事件,判断该节点“是否首次被展开”。
             如果该节点“是否首次被展开”,那么我们就给该节点的“每个子节点”,再添加“子节点”(如果有的话)。

    下面是一个加载目录树程序的完整代码:
    加载目录树程序的完整代码

    本文地址:http://www.cnblogs.com/anjou/archive/2006/12/28/605628.html
  • 相关阅读:
    能够免费做商业站点的CMS讨论
    ntoskrnl.exe损坏或丢失的解决方式
    QT 仓库管理系统 开放源代码
    Disposable microfluidic devices: fabrication, function, and application Gina S. Fiorini and Daniel T
    DllImport中的EntryPoint
    IOS Table中Cell的重用reuse机制分析
    双slave的server_uuid同样问题
    怎样使用SetTimer MFC 够具体
    2013 成都邀请赛
    设计模式六大原则(2):里氏替换原则
  • 原文地址:https://www.cnblogs.com/anjou/p/605628.html
Copyright © 2011-2022 走看看