Delphi ListView行列操作详解

Delphi 的 ListView 控件用起来其实还蛮顺手的,尤其是表格样式展示数据的时候,结构清晰,操作也不复杂。它分成两部分,HeaderItems,你可以把它理解成列头和一堆行。想加列?用Columns.Add,想插行?直接Items.Add,都挺直接的。

列的创建就是给 Header 加料,用ListView1.Columns.Add就能动态新增列,还能设置列名和宽度。比如:

var Column: TListColumn;
begin
  Column := ListView1.Columns.Add;
  Column.Caption := '列名';
  Column.Width := 100;
end;

行的添加也简单,一般就是搞个TListItem,往ListView1.Items里塞进去,再加上CaptionSubItems就成了:

var ListItem: TListItem;
begin
  ListItem := ListView1.Items.Add;
  ListItem.Caption := '行 1';
  ListItem.SubItems.Add('数据 1');
end;

修改数据更是小意思,随便改改Caption或者SubItems的值就行,比如想改第二行第三列的数据:

var ListItem: TListItem;
begin
  ListItem := ListView1.Items[1];
  ListItem.SubItems[2] := '新数据';
end;

数据量大的时候,可以用for循环批量塞数据。比如插 1000 行,每行都生成一条数据,还挺方便:

var I: Integer;
ListItem: TListItem;
begin
  for I := 1 to 1000 do
  begin
    ListItem := ListView1.Items.Add;
    ListItem.Caption := '行' + IntToStr(I);
    ListItem.SubItems.Add('数据' + IntToStr(I));
  end;
end;

不过话说回来,ListView 默认大量数据其实还挺吃力的,建议用VirtualMode。这种模式下它只可见部分,效率高了不少。代码也不难:

ListView1.ViewStyle := vsReport;
ListView1.VirtualMode := True;
ListView1.OnData := ListView1DataEvent;

你需要自己写个事件响应函数来动态填充数据,比如:

procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
var RowIndex: Integer;
begin
  RowIndex := Item.Index;
  Item.Caption := '行' + IntToStr(RowIndex);
  Item.SubItems.Add('数据' + IntToStr(RowIndex));
end;

如果你有批量数据显示的需求,又保持流畅体验,ListView 加虚拟模式这个组合挺靠谱的。写法清晰,性能也扛得住。

rar 文件大小:2.34MB