Delphi 7:如何填充TListView

3

我有一个TListView,其中有3个列,我需要从TCollection对象中获取如下内容:

FListeDispoProduit := TListeDispoProduit.Create(TProduit);

  with (FListeDispoProduit) do
  begin
    with TProduit(Add) do
    begin
      Name := 'Produit 01';
      CIP := 'A001';
      StockQty := 3;
    end;

但是当我尝试将这个对象放入Tlistview中时,只有第一列(名称)被填充。我写了以下代码:

for i := 0 to FListeDispoProduit.Count -1 do
     Tlistview1.Items.Insert(i).Caption := TProduit(FListeDispoProduit.Items[i]).Name;

我需要填写这三列(名称、CIP、库存数量),我该怎么做?

谢谢。

希望我表达清楚了。

2个回答

7
for i := 0 to FListeDispoProduit.Count -1 do  
   with ListView1.Items.Add() do begin
      Caption :=  TProduit(FListeDispoProduit.Items[i]).Name;  
      SubItems.Add(TProduit(FListeDispoProduit.Items[i]).CIP);   
      SubItems.Add(IntToStr(TProduit(FListeDispoProduit.Items[i]).StockQty));  
   end; 

在 TListView 中添加更多列


非常感谢Im0rtality. - TimeIsNear
1
我更喜欢避免使用WITH块。相反,我使用一个变量li:TListItem; 然后在for循环中,说li:= ListView1.Items.Add(); li.Caption... li.SubItems.Add...等。 - Phil Gilmore
7
我建议在插入大量项的循环中使用ListView1.Items.BeginUpdate和ListView1.Items.EndUpdate将其包裹起来。这会暂时禁用UI,以加快处理速度。 - Phil Gilmore
2
“begin” 应该放在新的一行。否则,对于训练有素的眼睛来说,似乎只有 Caption := ...with 语句中。此外,Phile Gilmore 的第二条评论非常重要。 - Andreas Rejbrand
谢谢,这对我帮助很大。 - Wayne Barron

0
Procedure TForm1.FillListView;
var
  i: Integer;
  ListItem: TListItem;
begin
  try
    ListView1.Items.BeginUpdate;
    try
      ListView1.Clear;
      for i := 1 to 9 do
        with ListView1 do
          begin
            ListItem := ListView1.Items.Add;
            Listitem.Caption := 'Caption '+IntToStr(i);
            ListItem.SubItems.Add('Subitem1 '+IntToStr(i));
            ListItem.SubItems.Add('Subitem2 '+IntToStr(i));
          end;
    finally
      ListView1.Items.EndUpdate;
    end;
  except
    on E: Exception do
      MessageDlg(PWideChar(E.Message), TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0);
  end;
end;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接