Delphi ListView行列操作详解
Delphi 的 ListView 控件用起来其实还蛮顺手的,尤其是表格样式展示数据的时候,结构清晰,操作也不复杂。它分成两部分,Header和Items,你可以把它理解成列头和一堆行。想加列?用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
里塞进去,再加上Caption
和SubItems
就成了:
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 加虚拟模式这个组合挺靠谱的。写法清晰,性能也扛得住。
2.34MB
文件大小:
评论区