TListView插入数据太慢,有什么方法提高速度

使用回调函数来添数据。给你一个例子

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TViewData=class
    Num : Integer;
    Name: AnsiString;
    Age : Integer;
end;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Label1: TLabel;
    StaticText1: TStaticText;
    Label2: TLabel;
    StaticText2: TStaticText;
    procedure ListView1Data(Sender: TObject; Item: TListItem);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
    DataList: TList;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
var
  TempData:TViewData;
  i       :Integer;
begin
  TempData :=DataList.Items[Item.Index];
  Item.Caption  :=IntToStr(TempData.Num);
  Item.SubItems.Add(TempData.Name);
  Item.SubItems.Add(IntToStr(TempData.Age));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  TempData:TViewData;
  i:integer;
  BeginTime,EndTime :Dword;
begin
  BeginTime :=GetTickCount();
  ListView1.OwnerData   := true;
  Listview1.Items.Count := StrToInt(Edit1.Text);
  DataList:= TList.Create ;
  for i:=0 to StrToInt(Edit1.Text) do
  begin
    TempData      := TViewData.Create;
    TempData.Num  := i;
    TempData.Name := 'Name'+IntToStr(i);
    TempData.Age  := 20*i-10;
    DataList.Add(TempData)
  end;
  EndTime  :=GetTickCount();
  StaticText1.Caption :=FloatToStr((EndTime-BeginTime)/1000);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  TempData :TListItem;
  i        :Integer;
  BeginTime,EndTime :Dword;
begin
  BeginTime :=GetTickCount();
  for i:=0 to StrToInt(Edit1.Text) do
  begin
    TempData :=ListView1.Items.Add;
    TempData.Caption :=IntToStr(i);
    TempData.SubItems.Add('Name'+IntToStr(i));
    TempData.SubItems.Add('Age'+IntToStr(i));
  end;
  EndTime  :=GetTickCount();
  StaticText2.Caption :=FloatToStr((EndTime-BeginTime)/1000);
end;

end.

 

myListview.Items.BeginUpdate;
    try
      ......
    finally
      myListView.Items.EndUpdate;
    end;

 

 

http://bbs.csdn.net/topics/30151090

http://bbs.csdn.net/topics/20077928

posted @ 2014-02-27 20:27  hanks  阅读(249)  评论(0)    收藏  举报