2010-08-12 2 views
2

У меня есть TListView с 3-мя колоннами, мне нужно от объекта TCollection как это следоватьDelphi 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 колонки (Имя, безразборной, 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

+1

Я предпочитаю избегать блоков WITH. Вместо этого я использую var li: TListItem; Затем в цикле for говорит li: = ListView1.Items.Add(); li.Caption ... li.SubItems.Add ... и т. д. –

+7

Я также рекомендую использовать ListView1.Items.BeginUpdate и ListView1.Items.EndUpdate для переноса циклов, которые вставляют большое количество элементов. Это временно отключает ui, чтобы ускорить работу. –

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; 
Смежные вопросы