我的ListView的数据量太大, 全部刷新,耗时太长
有没有办法, 只更新其中的数据改变了的Item====================================
e.g.
Items[Index]:=ImageIndex; //这一句导致全部刷新全部ListView  

解决方案 »

  1.   

    Items.BeginUpdate;
    Items[Index]:=ImageIndex;
    items.endupdate;
      

  2.   

    比如: ListView 有 A B C D 四个Item
    ListView.Items.BeginUpdate
    D.ImageIndex:=3
    ListView.Items.EndUpdate;结果系统认为
    ListView.Items.BeginUpdate
    A.ImageIndex:=0
    B.ImageIndex:=0
    C.ImageIndex:=0
    D.ImageIndex:=3
    ListView.Items.EndUpdate;而导致系统刷新A B C D 四个Item
    我只想刷新D, 有何办法   
    救命a~~~  
      

  3.   

    告诉你个根本办法{用ListView处理显示百万以上的数据,如果用传统的方法,即使使用BeginUpdate,EndUpdate,速度也远远不能满足要求,这个时候就要使用ListView的OwnerData功能了!OwnerData允许使用一个Vitual ListView和内存中的数据对应,我们只要在OnData中返回数据即可。OnData有一个参数Item,其中Item.Index就是第N项需要显示的数据!另外还可以利用OnDataHint,当数据发生变化的时候,进行的处理。具体的请参考Delphi的Demo VirtualListView。注意,一定要设置ListView.Items.Count属性,否则不会显示数据。
    }
    //上面是猛料的
    /////////////////////////////////////////////事例:1。  listview的ownerdata为true;2。
    procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
    begin
       item.caption:='0';
       item.SubItems.Add('1');
       item.SubItems.Add('2');
       item.SubItems.Add('3');
     end;   
    3。
    procedure TForm1.FormCreate(Sender: TObject);
    begin 
      ListView1.Columns.Clear;
      ListView1.Columns.Add.Caption := 'A';
      ListView1.Columns.Add.Caption := 'B';
      ListView1.Columns.Add.Caption := 'C';
      ListView1.Columns.Add.Caption := 'D';
      ListView1.items.count:=10;//控制总数
    end;
    /////////////////////////////////
    你可以举一反三
      

  4.   

    补充xiangwangz(<*敝屣荣华 浮云生死 此身何惧*>) 的办法:
    程序中需要写保存数据的全局数组或者类,在ListView1Data 中读入并加入到Item上