![]() |
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:
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:".
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; Geht das mit wasBraucheIchHier := LColumn.Summary.Create(was muß hier rein?) Und wie genau? |
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 |
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'; |
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:
Das läßt sich zwar fehlerfrei kompilieren, aber ich sehe keine Summe und keinen Footer.
LSummary := tvchecks.DataController.Summary.FooterSummaryItems.Add;
LSummary.Kind := skSum; LSummary.ItemLink := LColumn; 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: ![]() Auch hier sehe ich weder einen Footer noch eine Summe. Es kann doch nicht so schwierig sein, was habe ich übersehen? |
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
|
AW: cxGrid - einige Spalten mit Summe anzeigen
@Union Danke, das hat gefehlt, jetzt sehe ich den Footer.
:-D |
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 12:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz