Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi cxGrid - einige Spalten mit Summe anzeigen (https://www.delphipraxis.net/201943-cxgrid-einige-spalten-mit-summe-anzeigen.html)

Ron67 12. Sep 2019 11:04

Datenbank: mysql • Version: 10.1.26 • Zugriff über: fireDAC

cxGrid - einige Spalten mit Summe anzeigen
 
Moin,
Meine Frage scheint trivial zu sein. Aber ich kriege es nicht hin.

Ich habe ein cxGrid, welches mit der Query verbunden ist. Die Spaltenanzahl und die Spaltennamen variieren, die Query wird über Comboboxen und Checkboxen zusammen gesetzt.
Z.B:
Monat Werte2018 Werte2019
1 23 45
2 14 12
3 89 38
...

Code:
procedure TfrmChecks.DoTheSelect(ASelect : String);
  var
  I : Integer;
  LColumn : TcxGridDBColumn;
  LGridBreite : Integer;
begin
  qrySelect.Close; // Bleibt offen, bis Neue kommt
  qrySelect.sql.Clear;
  qrySelect.sql.Add(ASelect);
  qrySelect.Open();
  tvChecks.DataController.BeginUpdate;
  tvChecks.ClearItems;
  for I := 0 to qrySelect.FieldCount-1 do
  begin
    LColumn := tvChecks.CreateColumn;
    LColumn.DataBinding.FieldName := qrySelect.Fields[I].FieldName;
    LColumn.Name := qrySelect.Fields[I].FieldName;
    LColumn.Caption := qrySelect.Fields[I].FieldName;
    LColumn.Options.Editing := False;
    // Merke den Spaltennamen
    ColumnNames.Add(LColumn.Name);
  end;
  tvChecks.DataController.EndUpdate;
  tvChecks.DataController.RefreshExternalData;
  tvChecks.ApplyBestFit(); // Spaltenbreite optimieren(verkleinern)
  GridRowCount := tvChecks.DataController.RecordCount;
end;
Ich möchte nun in den Spalten mit den Werten die Summe darunter anzeigen. Und am liebsten auch unter der Spalte "Monat" den Text "Summe:".

Geht das mit
wasBraucheIchHier := LColumn.Summary.Create(was muß hier rein?)
Und wie genau?

oakley 12. Sep 2019 15:23

AW: cxGrid - einige Spalten mit Summe anzeigen
 
Moin,

ging das nicht so mit dem cxGrid von DevExpress:

var summe : TcxCustomGridTableItem;
begin
COL1.Summary.Create(summe);
end;

Du könntest danach über "summe" drauf zugreifen.

LG

Mirko

Union 12. Sep 2019 21:18

AW: cxGrid - einige Spalten mit Summe anzeigen
 
Ansatzweise so:
Delphi-Quellcode:
var
    SummaryItem := tvchecks.DataController.Summary.FooterSummaryItems.Add;
    SummaryItem.Kind := skSum;
    SummaryItem.ItemLink := LColumn;
    SummaryItem.Format := 'Summe 0.00;0.00';

Ron67 16. Sep 2019 11:26

AW: cxGrid - einige Spalten mit Summe anzeigen
 
Vielen Dank für die Antworten.
Bei Mirkos Ansatz bekomme ich Fehler, weil TcxCustomGridTableItem keine Elemente (.Kind, .ItemLink, .Format) enthält.

Der Typ muß wohl TcxGridDBTableSummaryItem sein, denn wenn ich im Design auf Customize gehe und bei Summary auf Add, dann steht dort unter Items
"0 - TcxGridDBTableSummaryItem".

Die Zeile von Union
LSummary := tvchecks.DataController.Summary.FooterSummaryItems .Add;
liefert allerdings ein Objekt vom Typ TcxDataSummaryItem

Ich bekomme inkompatiple Typen.

Ich probiere:
var LSummary : TcxDataSummaryItem;

Code:
      LSummary := tvchecks.DataController.Summary.FooterSummaryItems.Add;
     
      LSummary.Kind := skSum;
      LSummary.ItemLink := LColumn;
Das läßt sich zwar fehlerfrei kompilieren, aber ich sehe keine Summe und keinen Footer.

Ich habe noch einen anderen Lösungsansatz gefunden und ausprobiert:
var LSummary : TcxGridDBTableSummaryItem;

und dann:
LSummary := TcxGridDBTableSummaryItem.Create(tvchecks.DataCont roller.Summary.FooterSummaryItems);
gefunden hier:
https://www.delphipraxis.net/1186175-post2.html

Auch hier sehe ich weder einen Footer noch eine Summe.

Es kann doch nicht so schwierig sein, was habe ich übersehen?

Union 16. Sep 2019 11:51

AW: cxGrid - einige Spalten mit Summe anzeigen
 
Mach mal ein Mini-Testprojekt. Der von mir gepostete Code stammt aus einem lauffähigen Projekt. Wenn gar keine Fußzeilen zu sehen sind, musst Du sie anschalten.

Delphi-Quellcode:
OptionsView.Footer := True

Ron67 16. Sep 2019 12:31

AW: cxGrid - einige Spalten mit Summe anzeigen
 
@Union Danke, das hat gefehlt, jetzt sehe ich den Footer.
:-D

Union 16. Sep 2019 13:05

AW: cxGrid - einige Spalten mit Summe anzeigen
 
Um einen Text in der linken Nachbarspalte separat anzuzeigen, kannst Du das OnCustomDrawFooterCell Event verwenden. Die ColumnIndex-Abfragemusst Du natürlich anpassen:

Delphi-Quellcode:
procedure TfrmBelegKopf.cxGridBelegeDBTableView1CustomDrawFooterCell(
  Sender: TcxGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridColumnHeaderViewInfo; var ADone: Boolean);
var
  ColumnBounds : TRect;
  ColumnIndex : Integer;
begin
  ColumnIndex := AViewinfo.Column.Index;
  if ColumnIndex < 1 then exit;
  ColumnBounds := AViewInfo.Bounds;
  // Unter der linken Nachbarzelle zeichnen
  OffsetRect(ColumnBounds, -Sender.Columns[ColumnIndex-1].Width, 0);
  ACanvas.DrawTexT('Summen', ColumnBounds, cxAlignVCenter);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.

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