2010-08-12 13 views
2

J'ai un TListView avec 3 colonnes, j'ai besoin de l'objet TCollection que cette suiteDelphi 7: comment remplir un TListView

FListeDispoProduit := TListeDispoProduit.Create(TProduit); 

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

Mais lorsque je tente de mettre cet objet dans la TListView seule la première colonne (Nom) est remplir Je vous écris ceci:

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

Je dois remplir ces 3 colonnes (Nom, cip, StockQty), comment puis-je faire cela?

Merci.

J'espère être clair.

Répondre

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; 

Et ajouter d'autres colonnes dans TListView

+0

Merci beaucoup Im0rtality. – TimeIsNear

+1

Je préfère éviter les blocs WITH. Au lieu de cela, j'utilise un var li: TListItem; Puis dans la boucle for, dit li: = ListView1.Items.Add(); li.Caption ... li.SubItems.Add ... etc. –

+7

Je recommande également d'utiliser ListView1.Items.BeginUpdate et ListView1.Items.EndUpdate pour encapsuler des boucles qui insèrent un grand nombre d'éléments. Cela désactive temporairement l'interface utilisateur pour accélérer les choses. –

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;