我把查询出的数据加到listview中,第一次加载的时候很快,以后每当查询语句改变就先清空listview,又重新加载数据,但是速度特别慢,死机,请高手快快帮忙,要不我就惨了老板一会就来看了:(

解决方案 »

  1.   

    我的方法是把listview的ownerdata的属性设置为true,在listview的ondata的事件里写上adoquery1.fist
    adoquery.moveby(item.index)
    item.caption:=adoquery1.fieldbyname('name').asstring;
    然后在查询出数据时候写代码:
    listview.clear;
    listview.item.count:=adoquery1.recordcount;
    第一次加载很快,第二次就死了
      

  2.   

    本身listview就不适合大量数据
    你还是规规矩矩使用它的标准加入吧
    比如 listview.clear;
         listview.beginupdate;
         item:=listview.add;
         item.caption:='';
         strlist:=Tstrlist.create;//strlist是Tstrings
         strlist.addstring('ajfdkaj');
         item.subitem.add(strlist);
         strlist.free;
         listview.endupdate;
    手写的,可能有错,试试吧
      

  3.   

    可以将OwnerData设为True, 速度很快,但较麻烦,可参考Delphi例程: C:\Program Files\Borland\Delphi6\Demos\Virtual Listview\virtuallistview.dpr
      

  4.   

    myListView.Items.BeginUpdate;
      try
        myListView.Items.Clear;
        //在这儿添加节点
      finally
        myListView.Items.EndUpdate
      end;
      

  5.   

    使用BeginUpdate、EndUpdate在一定程度上可减少画面闪烁和提高贯入数据速度