Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stringgrid Zeilensumme in Label ausgeben (https://www.delphipraxis.net/148236-stringgrid-zeilensumme-label-ausgeben.html)

unchained 25. Feb 2010 15:45


Stringgrid Zeilensumme in Label ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Leute.

Ich arbeite wieder an einem Kassenprogramm und möchte die Gesamtsumme der Bestellwerte, welche in ein Stringgrid gelistet werden (Button Bestellung Abgeben) mit einem Knopfdruck in einem Label angezeigt haben (Button Gesamtverkauf des Abends).

ich habe schon verschiedene Methoden und Wege versucht aber nichts hat geklappt. Habs mit Stringgrid-Löschen funktion versucht und die irgendwie umzumodeln, dass sie statt löschen, addiert. Naja... erfolglos. Die Suche und Google spucken auch nichts verlässliches aus.

Das hat mir die suche ausgespuckt: Dort wird die Gesamtsumme im Ende des Stringgrids ausgegeben.

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
y, x : integer;
summe : double;

begin
summe := 0;
with stringgrid1 do
   begin
    for y:= fixedcols to colcount -1 do
      begin
       for x:= fixedrows to rowcount -3 do
         begin
          summe:= summe + strtofloat(cells[y,x]);
          cells[y,rowcount-1] := floattostr(summe);
         end;
      end;
   end;
end;
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

DeddyH 25. Feb 2010 15:48

Re: Stringgrid Zeilensumme in Label ausgeben
 
Die Lösung für das gesamte StringGrid hast Du ja jetzt. Wenn das nur für eine Zeile gelten soll, musst Du die Zeilenschleife eben weglassen.

unchained 25. Feb 2010 15:59

Re: Stringgrid Zeilensumme in Label ausgeben
 
ja soweit war ich auch :) dennoch möchte ich das ergebnis ungern am ende der zeile haben, sondern als showmessage oder in einem label.

da liegt der hund begraben

FrankJ28 25. Feb 2010 16:02

Re: Stringgrid Zeilensumme in Label ausgeben
 
label.caption:=floattostr(summe);

oder verstehe ich deine Frage nicht?

DeddyH 25. Feb 2010 16:03

Re: Stringgrid Zeilensumme in Label ausgeben
 
Dann musst Du doch nur die Zeile
Zitat:

Delphi-Quellcode:
cells[y,rowcount-1] := floattostr(summe);

entsprechend ändern. Übrigens würde ich die Ausgabe nach außerhalb der Schleifen verlagern, das kostet ja sonst nur unnötig Zeit.

unchained 25. Feb 2010 16:10

Re: Stringgrid Zeilensumme in Label ausgeben
 
also so siehts aus:

"ergebnis" ist der wert der aus einer bestellung hervorgeht, quasi der einzelbestellwert.
Im stringgrid werden viele dieser einzelbestellwerte aufgelistet und sollen über "button6" addiert und in einem Label ausgegeben werden.
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);

var
y, x : integer;
ergebnis : double;

begin
ergebnis := 0;
with stringgrid1 do
    begin
       for x:= fixedrows to rowcount -3 do
         begin
          ergebnis:= ergebnis + strtofloat(cells[y,x]);

         end;
      end;
 label21.caption:=floattostr(ergebnis);
   end;



end.
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

hoika 25. Feb 2010 16:19

Re: Stringgrid Zeilensumme in Label ausgeben
 
Hallo,

kleine Anmerkung.

Hast du die einzelnen Positionen nicht eh schon in deinem Programm (TList ?)

Dann würde ich dort summieren.


Heiko

DeddyH 25. Feb 2010 16:36

Re: Stringgrid Zeilensumme in Label ausgeben
 
Da hat Heiko vollkommen recht, aber falls nicht versuch es mal hiermit (heruntergetippt und nicht getestet):
Delphi-Quellcode:
function GridRowSum(const TheGrid: TStringGrid; RowIndex: integer; IgnoreFixedCols: Boolean = true): double;
var i, Start: integer;
begin
  Result := 0;
  if (RowIndex < 0) or (RowIndex >= TheGrid.RowCount) then
    raise Exception.CreateFmt('Zeilenindex %d ist nicht erreichbar',[RowIndex]);
  if IgnoreFixedCols then
    Start := TheGrid.FixedCols
  else
    Start := 0;
  for i := Start to TheGrid.ColCount - 1 do
    Result := Result + StrToFloatDef(TheGrid.Cells[i,RowIndex],0);
end;
[edit] Abfrage auf RowIndex < 0 eingebaut, falls später mal jemand auf diesen Thread stößt :roll: [/edit]

unchained 25. Feb 2010 17:06

Re: Stringgrid Zeilensumme in Label ausgeben
 
Sry, das funktioniert leider nicht. :(

Es funktioniert ja auch mit der funktion "Zellen löschen", dass auf alle zellen zugegriffen wird und diese "clear" werden.

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
 var
  I: Integer;
begin
  for I := 0 to StringGrid1.RowCount - 1 do
    StringGrid1.Rows[I].Clear();
  for I := 0 to StringGrid2.RowCount - 1 do
    StringGrid2.Rows[I].Clear();
  for I := 0 to StringGrid1.ColCount - 1 do
    StringGrid1.Cols[I].Clear();
  for I := 0 to StringGrid2.ColCount - 1 do
    StringGrid2.Cols[I].Clear();
end;
Klappt das nicht auch mit der Funktion "Addieren"? Dass ich quasi auf alle Zellen zugreife und sie statt "clear" einfach addiere?

[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

DeddyH 25. Feb 2010 17:08

Re: Stringgrid Zeilensumme in Label ausgeben
 
Mit "das funktioniert nicht" kann ich leider nichts anfangen. Kompiliert es nicht oder kommt nicht das erwartete Ergebnis? Wie hast Du es aufgerufen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 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