Sumowanie wybranych elementów w ListView

Odpowiedz Nowy wątek
2007-09-22 13:13
Janek2
0

Witam,

W jaki sposób zsumować elementy z listy w ListBox, tak aby odpowiadały elementom w ListView. czyli
w ListBox mam listę od 1 do 3 a ListView wygląda tak:

Element wartości
1 2
1 34
2 3
1 11
2 23
2 34
3 45

czyli teraz dla elementu 1 z listBox powinien zsumować wszystkie wartości dla elementu 1 w ListView i tak w pętli dla elementu 2 i 3.

Napisałem coś takiego ale daje mi dziwne wyniki

for I2 := 0 to ListView2.Items.Count - 1 do
begin
for I:= 0 to GrupyListBox.Items.Count - 1 do
begin
if GrupyListBox.Items.Strings[I] = ListView2.Items[I2].Caption then
suma := suma + strtoint(listview2.items[I2].subitems[1]);

     --> tu akcja np. showmessage(inttostr(suma));

end;
end;

Jak ktoś pomysł jak rozwiązać ten problem to proszę o pomoc.

Janek

Pozostało 580 znaków

2007-09-22 14:44
0

Skoro daje złe, to masz źle napisane :P
Powinno być raczej:

for I := 0 to GrupyListBox.Items.Count - 1 do
  begin
    suma := 0;
    for I2:= 0 to ListView2.Items.Count - 1 do
      if  GrupyListBox.Items.Strings[I] = ListView2.Items[I2].Caption then
        Inc(Suma,strtoint(listview2.items[I2].subitems[0]));

  end;

Piszę z głowy


Pozostało 580 znaków

2007-09-22 20:48
aa
0

Możesz jeszcze to zrobić tak, i rezultat masz w tablicy dyn. (sprawdzone na D7):

procedure Podlicz;
var
  Tab       : array of Integer; // tablica z wartościami dla indeksów w TListView
  i, temp   : Integer;          // obsługa pętli i zmienna pomocnicza
  Msg       : String;           // zmienna do wyświetlenia wyniku
begin
  SetLength(Tab, ListBox1.Count); // tablica z komórką dla każdego indeksu
  for i := 0 to ListView1.Items.Count - 1 do // sprawdzanie każdego elementu TListView
  begin
    Temp  := ListBox1.Items.IndexOf(ListView1.Items[i].Caption); //Sprawdza który indeks ma w ListBox'ie obecny Caption w TListView
    Tab[Temp] := Tab[Temp] + StrToInt(ListView1.Items[i].SubItems.Strings[0]); // Suma
  end;
  for i := Low(Tab) to High(Tab) do
    Msg := Msg + 'Indeks: ' + ListBox1.Items.Strings[i] + ' = ' + IntToStr(Tab[i]) + #13#10;
  ShowMessage('Podliczenie:' + #13#10 + Msg);
end;

</delphi>

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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