AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DevExpress Summe

Ein Thema von yamaha007 · begonnen am 21. Jul 2009 · letzter Beitrag vom 8. Okt 2009
Antwort Antwort
Seite 2 von 3     12 3      
Bebe

Registriert seit: 3. Apr 2005
Ort: Berlin
104 Beiträge
 
Delphi 10.1 Berlin Professional
 
#11

Re: DevExpress Summe

  Alt 23. Jul 2009, 07:20
Jetzt aber ....


Ab jetzt brauchst du keine Gruppe mehr vorgeben, d. h. ob du die Summarys änderst oder löscht wird immer bei einer Summe (skSum) die formatierte Zeit angezeigt.

Dazu brauchst du wieder meine Prozedure GetText und das Event vom Grid [Tableview].DataController.SummaryDefaultGroup.SummaryItems.O nSummary. Sobald eine Gruppierungsfunktion angezeigt werden soll wird das Event aufgerufen. Dabei prüfe ich ob es die korrekten Spalten sind (Es wird bei jeder Spalte in jedem Record ausgelöst).Dann ob es eine Footer ist und die Gruppierungsfunktion skSum. Wenn das der Fall ist, dann verbinde ich vom SummaryItem das Event OnGetText mit der Prozedure GetText. Diese Event wird nach der Summary Berechnung aufgerufen.

Einen kleinen Tipp habe ich noch. Hast du die Help Dateien runtergeladen, mir haben sie (fast) immer geholfen. Hier in diesem Fall aber nicht , dafür aber DevExpress Support, der ist sehr gut.

Der Eintrag war das was wir brauchten .... DevExpress Eintrag Q212225

Gruß
Matthias


Delphi-Quellcode:
procedure TForm1.cxGridDBTV1DataControllerSummaryDefaultGroupSummaryItemsSummary(
  ASender: TcxDataSummaryItems; Arguments: TcxSummaryEventArguments;
  var OutArguments: TcxSummaryEventOutArguments);
var
  AItem: TcxGridTableSummaryItem;
  AValue: Variant;
begin
  AItem := TcxGridTableSummaryItem(Arguments.SummaryItem);

  // Prüfe ob es die gewünschte Spalte ist
  if (AItem.Column = cxGridDBColZeit1) or (AItem.Column = cxGridDBColZeit2) or
    (AItem.Column = cxGridDBColZeit3) then
  begin
    // Bedingung : es ist ein Footer und soll die Summe angezeigt werden
    if (AItem.Position = spFooter) and (AItem.Kind = skSum) then
      // Event OnGetText einschalten
      AItem.OnGetText := GetText
    else
    begin
      // Event OnGetText ausschalten und Exit
      AItem.OnGetText := nil;
      Exit;
    end;
    //Entnehme die Werte aus der korrekten Spalte
      if AItem.Column = cxGridDBColZeit1 then
        AValue := cxGridDBTV1.DataController.Values[
          Arguments.RecordIndex, cxGridDBColZeit1.Index]
      else if AItem.Column = cxGridDBColZeit2 then
        AValue := cxGridDBTV1.DataController.Values[
          Arguments.RecordIndex, cxGridDBColZeit2.Index]
      else if AItem.Column = cxGridDBColZeit3 then
        AValue := cxGridDBTV1.DataController.Values[
          Arguments.RecordIndex, cxGridDBColZeit3.Index];

      // Nachfolgende Abfrage auskommentiert, da weiterhin gerechnet wird.
      // Nur wenn man bestimmte Datensätze berechnet haben möchte
      // könnte man die DS filtern und in SummaryValue addieren.

      //nur als Beispiel

      // if not VarIsNull(AValue) then
      // begin
      // OutArguments.SummaryValue := AValue + OutArguments.SummaryValue;
      // OutArguments.Done := true;
      // end;

  end;
end;

procedure TForm1.GetText(Sender: TcxDataSummaryItem; const AValue: Variant;
  AIsFooter: Boolean; var AText: string);
begin
  if AValue <> Null then
    AText := FormatDateTime('hh:mm', AValue);
end;
Angehängte Dateien
Dateityp: zip projekte_188.zip (8,7 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
yamaha007

Registriert seit: 16. Jul 2009
17 Beiträge
 
RAD-Studio 2009 Ent
 
#12

Re: DevExpress Summe

  Alt 23. Jul 2009, 08:23
Hi, vielen vielen Dank. Funktioniert - wie gewünscht.


bis demnächst.
  Mit Zitat antworten Zitat
Bebe

Registriert seit: 3. Apr 2005
Ort: Berlin
104 Beiträge
 
Delphi 10.1 Berlin Professional
 
#13

Re: DevExpress Summe

  Alt 23. Jul 2009, 08:34
Das freut mich ...

Bis dann
Gruß
Matthias
  Mit Zitat antworten Zitat
nindri

Registriert seit: 5. Okt 2009
11 Beiträge
 
#14

Re: DevExpress Summe

  Alt 5. Okt 2009, 15:41
Hallo alle zusammen,

ich belebe das Thema wieder zum Leben...

Bei mir klappt das alles nicht so wie es bei mir sein soll.

Entweder habe ich es einfach nicht verstanden oder habe ein anderes Problem.

Ich möchte ein Colum was folgendes Format hat: "Time Edit" - "tfHourMin"

Unter Summary habe ich dann das Column ausgesucht das entsprechende FiueldName ausgewählt und als Kind skSum gesetzt, aber komischer weise kann mein Grid nur "Max, Min und Count" bei Summ passiert einfach nichts wisst ihr woran es liegen könnte?

Einmal hat er irgendwie eine Summe "addiert", aber da kam dann ein Datum und dann eine falsche Zeit raus.

Soweit ich es richtig verstanden habe, kann DevExpress bzw. Allgemein kann die Zeit nicht addiert werden, wie kann ich für das einzelne lösen?

Vielen Dank für eure hilfe
  Mit Zitat antworten Zitat
Bebe

Registriert seit: 3. Apr 2005
Ort: Berlin
104 Beiträge
 
Delphi 10.1 Berlin Professional
 
#15

Re: DevExpress Summe

  Alt 5. Okt 2009, 16:38
Herzlich Willkommen (dass ich das mal als erster sage ... Cool)

Ich denke dein Problem ist das Datenbankfeld, das wird vom Typ DateTime sein.
Stelle es um auf Float, was letzendlich ein DateTime Field ja ist, dann hast du den Durchschnitt, sowie die Summe als Auswahl. Die Column zeigst du als TimeEdit an (+ tfHourMin).

Das sollte klappen.

Gruß
Matze
  Mit Zitat antworten Zitat
nindri

Registriert seit: 5. Okt 2009
11 Beiträge
 
#16

Re: DevExpress Summe

  Alt 5. Okt 2009, 22:27
Vielen Dank.

Aber leider kommt folgendes Problem:

die Zeitzen sind z.B. alle auf "0" und mein Grid hat als "Summe" 31 und wenn ich dann z.B. als Zeit 01:22 angebe dann rechnet er das auch ganz komisch zusammen nicht so wie als "Zeit".
Hoffentlich habe ich das jetzt gut genug erklärt.
  Mit Zitat antworten Zitat
Bebe

Registriert seit: 3. Apr 2005
Ort: Berlin
104 Beiträge
 
Delphi 10.1 Berlin Professional
 
#17

Re: DevExpress Summe

  Alt 6. Okt 2009, 05:27
Hallo,

nach meiner Meinung ist nur scheinbar überall der Wert 0, ansonsten würde das Grid nicht die Summe 31 anzeigen. Überschreibe mal alle Wert der Spalte mit 0.

Das mit der Gruppensumme ist korrekt, die mußt du bei der Ausgabe natürlich formatieren, da das Grid sonst die Summe in Float anzeigt, es orientiert sich an den Typ vom DB Feld, was ja Float ist.
Versuche es mal mit OnGetText

Zitat von Bebe:
Hallo,

wenn du dir ein Footer erstellst, dann nimm doch das Event GetText vom Summary-Item

als Beispiel ...

TcxGridDBDataController.TcxDataSummary.FooterSummary.Items[0].GetText(Sender: TcxDataSummaryItem; const AValue: Variant; AIsFooter: Boolean; var AText: string) Den Wert entnimmst du von AValue, den du dann bei AText formatiert darstellen kannst. Ich hoffe du kannst damit etwas anfangen.

Gruß
Matze
und natürlich den Code, die Formatierung vielleicht noch ändern.

Delphi-Quellcode:
  if AValue <> Null then
    AText := FormatDateTime('hh:mm', AValue);
  Mit Zitat antworten Zitat
nindri

Registriert seit: 5. Okt 2009
11 Beiträge
 
#18

Re: DevExpress Summe

  Alt 6. Okt 2009, 08:37
hmm soweit ich es richtig verstanden habe muss ich nur folgendes machen:

Delphi-Quellcode:
procedure TfrmStundenMA.cxGrid1DBBandedTableView1TcxGridDBDataControllerTcxDataSummaryFooterSummaryItems0GetText(
  Sender: TcxDataSummaryItem; const AValue: Variant; AIsFooter: Boolean;
  var AText: string);
begin

    if AValue <> Null then
      AText := FormatDateTime('hh:mm', AValue);
end;
Also beim Ergebnis "OnGetText" wird geprüft, ob der Wert "nicht NULL" ist und dann wird im Footer das Format in 'hh:mm' geändert und als "AValue" gespcihert?

Bei mir kommen immernoch die komischen Zahlen raus also statt ca. 8 Stunden sagt mein Grid im Footer 0,89 oder so.

ini Dateien habe ich natürlich auch gelöscht danach.


Vielen Dank
  Mit Zitat antworten Zitat
nindri

Registriert seit: 5. Okt 2009
11 Beiträge
 
#19

Re: DevExpress Summe

  Alt 6. Okt 2009, 09:07
mit den Beispielprojekten habe ich dieselben Probleme, wenn ich z.B. von "Zeit1" die Summe berechnen lasse kommt 0,16 raus statt.... ca.98 oder so hmm
  Mit Zitat antworten Zitat
nindri

Registriert seit: 5. Okt 2009
11 Beiträge
 
#20

Re: DevExpress Summe

  Alt 6. Okt 2009, 14:59
Ok Problem gelöst, ich habe einfach in MySQL die Stunde - Minute errechnet und dann unter OnGetText anzeigen lassen.

Vielen Dank für die Hilfe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:23 Uhr.
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