Thema: Delphi DevExpress Summe

Einzelnen Beitrag anzeigen

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