Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Werte von stringgrid zellen zusammenrechnen (https://www.delphipraxis.net/180228-werte-von-stringgrid-zellen-zusammenrechnen.html)

rhodan 2. Mai 2014 19:40

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:
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;
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...
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

zeras 2. Mai 2014 19:47

AW: Werte von stringgrid zellen zusammenrechnen
 
Zitat:

Zitat von rhodan (Beitrag 1257754)
hi..

ich schätze mal ich muss den grid.colcount einem integer zuweisen, aber bei dem rest steh ich auf dem schlauch.

Du musst grid.rowcount und grid.colcount auslesen (nicht zuweisen), damit die Grenzen bestimmen und dann alles zusammenrechnen, d.h. in jeder Zeile alls zusammenrechnen und das für alle Zeilen tun.
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.

mkinzler 2. Mai 2014 19:50

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;

rhodan 2. Mai 2014 19:58

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

mkinzler 2. Mai 2014 20:06

AW: Werte von stringgrid zellen zusammenrechnen
 
Einfach 0 als Standardwert statt 1.

rhodan 2. Mai 2014 20:11

AW: Werte von stringgrid zellen zusammenrechnen
 
danke dir !

Popov 2. Mai 2014 21:17

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:
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;
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.

DeddyH 3. Mai 2014 10:58

AW: Werte von stringgrid zellen zusammenrechnen
 
Da wäre TryStrToFloat aber erheblich zielführender und vor allem verständlicher.

mkinzler 3. Mai 2014 11:04

AW: Werte von stringgrid zellen zusammenrechnen
 
Ich würde auch eher versuchen falsche Eingaben zu verhindern

Sir Rufo 3. Mai 2014 11:20

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:36 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz