ListView i kolejność

0

Witam
Mam pytanie co do wprowadzania danych do ListView (vsReport) i ich kolejności. Mam w procedurze coś takiego:

    Item := ListView1.Items.Add;
    Item.Caption := a;
    Item.SubItems.Add(b);
    Item.SubItems.Add(c);    

Wydaję mi się, że przy takim wprowadzaniu wszystkie te dane powinny być w jednym wierszu. U mnie tylko 2 i 3 kolumna trzyma się razem, a pierwsza jest na odwrót, czyli jakby nowe dane do pierwszej wchodziły pod stare, a do 2 i 3 nad.

Tak powinno być, czy ja robię gdzieś błąd?

1
ilek6 napisał(a)

U mnie tylko 2 i 3 kolumna trzyma się razem, a pierwsza jest na odwrót, czyli jakby nowe dane do pierwszej wchodziły pod stare, a do 2 i 3 nad.

Nie mam pojęcia o co Ci chodzi, ale zobacz na programik, który załączam; Jest w nim tylko komponent z klasy TListView (ustawiony na vsReport), oraz przycisk do wstawiania nowego wiersza; Kod procedura dodająca wiersz przedstawia się następująco:

procedure TForm1.btnAddClick(Sender: TObject);
var
  Item: TListItem;
begin
  Item := lvList.Items.Add();

  with Item do
    begin
      Caption := 'Kolumna 1 (Caption)';

      SubItems.Add('Kolumna 2 (SubItems[0])');
      SubItems.Add('Kolumna 3 (SubItems[1])');
    end;
end;

Wszystko działa jak należy; Sprawdź;

0

Wszystko działa poprawnie, po prostu źle coś w procedurze napisałem i wyglądało to jakby było na odwrót.

Ale mam jeszcze jedno pytanie, pętla jest czasami powtarzana kilkadziesiąt tysięcy razy i takie wprowadzanie danych znaaacznie wydłuża czas wykonywania programu. Jak mogę to przyśpieszyć? Listview1.Items.beginUpdate/Listview1.Items.Endupdate; nie bardzo pomaga.

0

Nie bardzo masz jak, szybszego kodu raczej sam nie wymodzisz, chyba, że takowy gdzieś na sieci znajdziesz;

Jeśli dana operacja ma się wykonywać co najmniej kilka sekund, polecam stworzenie wątku i podpiąć licznik pętli pod kontrolkę z klasy TProgressBar, którą umieścisz w okienku informującym użytkownika o przeprowadzanych operacjach (jak np. w instalatorach aplikacji); Wtedy user będzie wiedział, że się coś wykonuje i czas nie będzie miał większego znaczenia; To co musi trwać - będzie trwać;

Jeśli jesteś ambitny to możesz zawsze oprzeć to na wątku, który będzie można zatrzymać, jeżeli tylko użyszkodnik sobie tego zażyczy (o ile będzie istniała taka możliwość w projekcie);

1 użytkowników online, w tym zalogowanych: 0, gości: 1