Devexpress XtraTreeList 加载速度问题

Snap1

测试一:建立一个测试工程,放入一个button和一个xtratreelist控件,在button事件中加入如下代码

     private void simpleButton1_Click(object sender, EventArgs e)
        {
            
            treeList1.Nodes.Clear();
            int nodecount = 30000;
            for (int i = 0; i < nodecount; i++)
            {
                treeList1.AppendNode(new object[] {i.ToString(),"列2","列3","列4" },null);
            } 
        }

当点击按钮后就要开始等待(才三万条数据)。

测试二:测试一中的这个问题比较显性,呵呵,为什么这么说呢,因为我们工程中实现时是这样的。由于工程采用向导模式(当时在向导模式里的其它代码绕了半天),

我简化了一下代码如下(需要先将xtralist控件的visible属性设置为false,其它不变,这样可以直接看到问题):

    private void simpleButton1_Click(object sender, EventArgs e)
        {
            treeList1.Visible = false;
            treeList1.Nodes.Clear();
            int nodecount = 30000;
            for (int i = 0; i < nodecount; i++)
            {
                treeList1.AppendNode(new object[] {i.ToString(),"列2","列3","列4" },null);
            }
            treeList1.Visible = true;
        }
这时我们运行程序后第一次点击速度会很快,但第二次点击时去像测试一的一样速度极慢,这是为什么呢?
通过简化的代码可以理解为在不可见的情况下加载速度快,可第二次为什么又慢了呢?没太想明白(有时间看看控件源码,查下原理)
 
解决办法:在开始处及结尾处加入xtratreelist的begininit()及endinit()方法,对测试一、二均有效
   private void simpleButton1_Click(object sender, EventArgs e)
        {
            treeList1.BeginInit();
            treeList1.Nodes.Clear();
            int nodecount = 30000;
            for (int i = 0; i < nodecount; i++)
            {
                treeList1.AppendNode(new object[] {i.ToString(),"列2","列3","列4" },null);
            }
            treeList1.EndInit();
        }
希望有此类的问题的朋友能少绕围路:)
 
通过对xtratreelist代码分析发现其实现了ISupportInitialize接口,《详细解释ISupportInitialize接口 》对ISupportInitialize有详细描述。

转载于:https://www.cnblogs.com/forrestsun/archive/2011/05/12/2044074.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值