2010-08-12 21 views
2

我有一个TListView的3列,我从Tcollection对象需要,因为这遵循德尔福7:如何用红色填充的TListView

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; 

我需要填补这些3列(名称,CIP,StockQty),我该怎么办呢?

谢谢。

希望我是清楚的。

回答

5
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的

+0

列非常感谢您Im0rtality。 – TimeIsNear 2010-08-12 08:22:10

+1

我宁愿避免块。相反,我使用var li:TListItem;然后,在for循环中,表示立:= ListView1.Items.Add(); li.Caption ... li.SubItems.Add ...等 – 2010-08-12 17:28:23

+7

我还推荐使用ListView1.Items.BeginUpdate和ListView1.Items.EndUpdate来包装插入大量项目的循环。它暂时禁用ui来加快速度。 – 2010-08-12 17:31:32

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;