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;
浙公网安备 33010602011771号