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
                                
                                
                                
                            
评论区