![]() |
Werte von stringgrid zellen zusammenrechnen
hi..
mit folgendem code addiere ich die werte von stringgrid zellen zusammen und weise sie einem editfeld zu:
Delphi-Quellcode:
mein problem ist das die anzahl der Columns nicht feststehend ist, der user kann neue hinzufügen oder löschen...hat jemand eine idee wie ich das umsetzen kann? im prinzip muss die anzahl der bestehenen columns ausgelesen werden (in diesem falle 3) und die werte der drei addiert werden...wenns 5 sind eben der 5...etc...
procedure TForm2.Button1Click(Sender: TObject);
var Z1, Z2,z3: extended; begin z1 := strtofloatdef(Grid.Cells[1,1], 1); z2 := StrTofloatdef(Grid.Cells[2,1], 1); z3 := StrTofloatdef(Grid.Cells[3,1], 1); edit1.text:= floattostr((z1+z2+z3)); end; könnt ihr mir nen tip geben? ich schätze mal ich muss den grid.colcount einem integer zuweisen, aber bei dem rest steh ich auf dem schlauch. lg lg robin |
AW: Werte von stringgrid zellen zusammenrechnen
Zitat:
Vorher aber noch aufpassen, dass du eventuelle Kopftexte nicht mit zum Rechnen nutzt. Außerdem solltest du vorher prüfen, ob es überhaupt Zahlen sind. |
AW: Werte von stringgrid zellen zusammenrechnen
Die vorhandene Anzahl von Spalten kannst Du ermitteln, indem du Grid.ColCount abfragst.
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var z: Extended; i: integer; begin z := 0; for i := 0 to Grid.ColCount-1 do begin z := z + strtofloatdef(Grid.Cells[i,1], 1); end; edit1.text:= floattostr(z); end; |
AW: Werte von stringgrid zellen zusammenrechnen
Liste der Anhänge anzeigen (Anzahl: 1)
ich danke dir!
ich hab hier das problem das leere zellen als 1 komischerweise gezählt werden...ich löse das jetzt so das ich in der column jede leere zelle mit '0' fülle schätze ich. es geht um die zeile "stunden pro woche", hier kriege ich eine 43 als ergebnis. liebe grüße |
AW: Werte von stringgrid zellen zusammenrechnen
Einfach 0 als Standardwert statt 1.
|
AW: Werte von stringgrid zellen zusammenrechnen
danke dir !
|
AW: Werte von stringgrid zellen zusammenrechnen
Es ist keine gute Idee mit StrToFloatDif zu arbeiten. Damit vermeidest du zwar eine Fehlermeldung, aber die Fehlermeldung hat einen Sinn. Sie warnt davor wenn ein Fehler auftritt. Schreibt einer in Spalte Robin den Wert "321.45", bekommst du den Fehler gar nicht mit. Der Wert wird in StrToFloatDif genullt und taucht in der Statistik nicht auf. Wenn du nicht die Standardfehlermeldung haben willst, kannst du eine eigene schreiben. Hier zwei Beispiele:
Delphi-Quellcode:
Die erste gibt die Zeile und Spalte als Wert zurück, bei der Zweiten kannst du die Überschriften angeben. Und lass dich von der bösen Fehlermeldung in der Entwicklungsumgebung nicht abschrecken. Stäter, aus der Exe heraus, sieht die harmloser aus.
function StrToFloatSG(const S: String; ACol, ARow: Integer): Extended; overload;
begin if StrToFloatDef(S, 0) <> StrToFloatDef(S, 1) then raise Exception.CreateFmt('Ungültiger Wert in Zelle [%d.%d]', [ACol, ARow]); Result := StrToFloat(S); end; function StrToFloatSG(const S, SCol, SRow: String): Extended; overload; begin if StrToFloatDef(S, 0) <> StrToFloatDef(S, 1) then raise Exception.CreateFmt('Ungültiger Wert in Spalte "%s" und Zelle "%s"', [SCol, SRow]); Result := StrToFloat(S); end; procedure TForm1.Button1Click(Sender: TObject); var z: Extended; i: integer; begin z := 0; for i := 0 to Grid.ColCount-1 do begin //z := z + strtofloatdef(Grid.Cells[i,1], 1); //z := z + StrToFloatSG(Grid.Cells[i,1], 1, i); z := z + StrToFloatSG(Grid.Cells[i,1], Grid.Cells[1, 0], Grid.Cells[0, 1]); end; edit1.text:= floattostr(z); end; |
AW: Werte von stringgrid zellen zusammenrechnen
Da wäre TryStrToFloat aber erheblich zielführender und vor allem verständlicher.
|
AW: Werte von stringgrid zellen zusammenrechnen
Ich würde auch eher versuchen falsche Eingaben zu verhindern
|
AW: Werte von stringgrid zellen zusammenrechnen
Generell ist es immer besser die Controls nicht als Werte-Speicher zu gebrauchen.
Die Intention ist Daten anzuzeigen und (wenn Eingaben möglich sind) Eingaben entgegen zu nehmen. Diese Eingaben sollten dann direkt nach der Eingabe auf Plausibilität und Kontext geprüft werden und in einer Datenstruktur gespeichert werden. Im Control werden dann diese (geprüften) Werte wieder dargestellt. Aggregate (z.B. Summenbildung) erfolgen dann über die Datenstruktur. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:01 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 by Thomas Breitkreuz