![]() |
In den ListView SubItems Beträge addieren
Habe im Forum nix dazu gefunden, also möcht ich Euch wiedermal nerven.
Es gaht darum das ich in einer ListView in den SubItems Beträge zu stehen habe, wie kann ich nun alle Beträge addieren und in z.B. in einem Label die Gesamtsumme anzeigen lassen? |
Re: In den ListView SubItems Beträge addieren
Manuell durchgehen, Werte auslesen, addieren, ausgeben.
|
Re: In den ListView SubItems Beträge addieren
Wenn die Werte im ersten SubItem stehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, gesamt: integer; begin gesamt := 0 ; for i := 0 to ListView1.Items.Count - 1 do inc(gesamt, StrToInt(ListView1.Items[i].SubItems[0])); Label1.Caption := IntToStr(gesamt); end; |
Re: In den ListView SubItems Beträge addieren
Danke Euch beiden für die Antwort.
Nur möcht ich Beträge zusammenrechnen, d.h. ich muss eine Kommazahl addieren(hätt ich ja auch vorher angeben können, schäm). Das mit dem Code ist schon Klasse nur wie muss ich den mit StrToFloat verwenden? |
Re: In den ListView SubItems Beträge addieren
Einfache Lösung: StrToFloat statt StrToInt. Besser natürlich TryStrToFloat oder Val
|
Re: In den ListView SubItems Beträge addieren
Zitat:
hab jetz schon ne menge probiert, aber immer beklagt er sich z.B. bei
Delphi-Quellcode:
das er der linken Seite nicht zuweisen kann.
inc(gesamt, StrToFloat(ListView1.Items[i].SubItems[0]));
Wo liegt nur mein Fehler. Und was ist eigendlich der unterschied zwischen StrToFloat und TryStrToFloat |
Re: In den ListView SubItems Beträge addieren
Delphi-Quellcode:
StrToFloat liefert eine Exception, wenn die Konvertierung nicht funktioniert. TryStrToFloat gibt dann nur false zurück.
gesamt := gesamt + StrToFloat(ListView1.Items[i].SubItems[0]);
|
Re: In den ListView SubItems Beträge addieren
Zum Unterschied kannst Du die Hilfe bemühen ;).Und zu der Fehlermeldung: ändere die Zeile
Delphi-Quellcode:
mal ab in
inc(gesamt, StrToFloat(ListView1.Items[i].SubItems[0]));
Delphi-Quellcode:
Oder eben TryStrToFloat *gg*
gesamt := gesamt + StrToFloat(ListView1.Items[i].SubItems[0]);
[edit] Mal wieder zu spät :? [/edit] |
Re: In den ListView SubItems Beträge addieren
Ohhhhhh gott ich beiß mir in den Schliessmuskel, ich bedanke mich rechtherzlich für Eure geduld.
|
Re: In den ListView SubItems Beträge addieren
Ich häng mich mal rein weil ich ein Ähnliches Problem Hab
ich Habe im Listview bei Items[0] die Checkboxen in Items[2] einen Preis wenn ich die Checkboxen aktiviere dann soll in einem Editfeld die preise Addiert werden ich versuch das grad so
Delphi-Quellcode:
procedure TForm4.ListView1Click(Sender: TObject);
begin if Listview1.Items[0].Checked then Edit1.Text := InttoStr(StrtoInt(Edit1.Text) + StrtoInt(Listview1.items[2].Caption)) else Edit1.Text := InttoStr(StrtoInt(Edit1.Text) - StrtoInt(Listview1.items[2].Caption)); end; |
Re: In den ListView SubItems Beträge addieren
Das kommt mir komisch vor, stell doch mal einen Screenshot rein.
|
Re: In den ListView SubItems Beträge addieren
Und was geht nicht? Bzw. wie können wir dir Helfen?
|
Re: In den ListView SubItems Beträge addieren
Ich vermute stark, dass er versehentlich Items und SubItems verwechselt hat, deshalb meine Bitte um einen Screenshot.
|
Re: In den ListView SubItems Beträge addieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hier
|
Re: In den ListView SubItems Beträge addieren
Zitat:
|
Re: In den ListView SubItems Beträge addieren
@Gehstock: der Preis steht nicht in Items[2], sondern in SubItems[1].
|
Re: In den ListView SubItems Beträge addieren
Danke
und nochmal Danke hatte ich grad auch |
Re: In den ListView SubItems Beträge addieren
Delphi-Quellcode:
die zuweisung von i klappt nicht da ja nichts selected wird also wie sag ich i das es
procedure TForm4.ListView1Change(Sender: TObject; Item: TListItem;
Change: TItemChange); var i: Integer; begin i:=0; //i :=Listview1.Selected.Index; if Listview1.Items[i].Checked then begin Ergebnis := StrtoFloat(Edit1.Text) + StrtoFloat(Listview1.Items[i].SubItems[1]); end else begin Ergebnis := StrtoFloat(Edit1.Text) - StrtoFloat(Listview1.Items[i].SubItems[1]); end; Edit1.Text :=Floattostr(Ergebnis) end; das 2. oder 3. item ist wenn ich in die 2. zeile klicke |
Re: In den ListView SubItems Beträge addieren
Delphi-Quellcode:
habs selbst erledigt
procedure TForm4.ListView1Change(Sender: TObject; Item: TListItem;
Change: TItemChange); var i: integer; gesamt : Extended; begin gesamt := 5.99 ; // Grundpreis for i := 0 to ListView1.Items.Count - 1 do if Listview1.Items[i].Checked then gesamt := gesamt + StrToFloat(ListView1.Items[i].SubItems[1]); if gesamt = 5.99 then gesamt := 0; wenn nichts gewählt auch kein grundpreis Edit1.Text := FloatToStr(gesamt); end; |
Re: In den ListView SubItems Beträge addieren
Hai Gehstock,
als Tip für zukünftigen Code habe ich das ganze mal etwas umgebaut.
Delphi-Quellcode:
uses
SysUtils; procedure RealInc(var x: Extended; const aValue: Extended = 1.0); overload; begin x := x + aValue; end; function RealInc(var x: Extended; const aValue: string = ''; errohandling: Boolean = True): Boolean; overload; var realvalue: Extended; begin result := False; if TryStrToFloat(aValue, realvalue) then begin RealInc(x, realvalue); result := True; end else begin if (errohandling) then begin raise Exception.create(Format( 'Der Inhalt von aValue ("%s") ist kein gültiger Gleitkommawert', [aValue])); end; end; end; function AddValuesFromLV(aLV: TListView; var aValue: Extended): Integer; var i: Integer; checkcount: Integer; begin checkcount := 0; with aLV do begin for i := 0 to Pred(Items.Count) do begin if (Items[i].Checked) then begin if (RealInc(aValue, Items[i].SubItems[1], False)) then begin Inc(checkcount); end; end; end; end; result := checkcount; end; procedure TDemo_Form.ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange); const grundpreis = 5.99; var gesamt: Extended; begin gesamt := 0; if (AddValuesFromLV((Sender as TListView), gesamt) > 0) then begin RealInc(gesamt, grundpreis); end; Edit1.Text := FloatToStr(gesamt); end; |
Re: In den ListView SubItems Beträge addieren
Vlt. sollte man nicht immer fix "SubItems[1]" etc. nutzen. Wenn man eine Spalte hinzufügen, löschen oder verschieben muss oder will, müsste man jede fixe Index-Angabe im ganzen Programm ändern - was wahrlich kein Spaß ist. Also lieber Konstanten etc. nutzen :-D
*davon schleich* ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz