Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   cxGrid und CustomDrawCell (https://www.delphipraxis.net/154897-cxgrid-und-customdrawcell.html)

opfer.der.genauigkeit 29. Sep 2010 20:33

cxGrid und CustomDrawCell
 
Hallo,

ich habe ein interessantes Problem mit dem cxGrid.

Folgende Konstellation:
- Query + DataSource + GridDBTableView

Alle drei sind miteinander verdratet.

Nun wollte ich beim CustomDrawCell unter bestimmten Bedingungen (testweise) die Schriftfarbe für eine Zelle ändern.

Ursprünglich dachte ich, dass dies relativ einfach ginge. Und da das Grid datengebunden ist, ging ich davon aus,
dass meine Query auch entsprechend auf dem aktuellen Datensatz steht, der gezeichnet werden soll.
Leider ist das nicht der Fall. Halb so schlimm im Prinzip. Wenn ich eine alternative hätte korrekt auf die Daten zuzugreifen.

Dann habe ich versucht mit cxGridDBTableView1.GetColumnByFieldName('Column1') .EditValue an die Daten zu kommen
und an eine weite Column aus dem gleichen Datensatz also per cxGridDBTableView1.GetColumnByFieldName('Column2') .EditValue...

Auch diese Werte entsprachen nicht der gezeichneten Zeile. Diese Informationen sind genau dann gültig, wenn ich auf die Zeile klicke,
was ich zum Zeichen recht selten tue.

Im Wesentlichen besteht das Problem darin, dass die zu zeichnende Zeile, in die die Routine läuft keine mir ersichtliche Referenz auf
irgendeinen Datensatz besitzt.

Alles in allem ist das ein nicht erwartetes Verhalten. Aber die Lösung sieht bestimmt ganz simpel aus und es gibt nur eine einzige Option der
Komponente, die ich setzen müsste, wenn ich sie finden würde.

Hoffe jemand kann mir helfen.

LG

Crosspost in der EE: http://www.delphi-forum.de/viewtopic.php?p=619090

alzaimar 29. Sep 2010 21:10

AW: cxGrid und CustomDrawCell
 
Nee, nee. Das Grid ist ja nicht blöd und liest die Daten jedesmal aus der Datenmenge.
Die Daten stehen in der Eigenschaft
Delphi-Quellcode:
MyGridView.DataController.Values[MyGridView.DataController.FocusedRecordindex, MyColumnIndex];
Und den Spaltenindex bekommst Du über die einzelnen Spalten-TcxDBGridColumn und deren Index-Eigenschaft.

Es gibt aber eine bessere Möglichkeit der konditionalen Färbung. Ich hab gerade kein Delphi, aber es müsste soetwas wie 'GetStyle' sein: Du definierst unterschiedliche Styles und weist dann in diesem Event der Zelle den gewünschten Style zu, in Abhängigkeit der o.g. Werte.

Das alles müsste allerdings sehr anschaulich in den Demos zu finden sein.

opfer.der.genauigkeit 30. Sep 2010 10:59

AW: cxGrid und CustomDrawCell
 
Hi,

danke f. den Hinweis. Ich hab's jetzt nicht ausprobiert, aber ich vermute mal, dass deine Lösung auch funktioniert.

Mittlerweile hab ich rausgefunden, dass man über AViewInfo.GridRecord.DisplayTexts[ColumnIndex] an den richtigen Wert benachbarter Zellen kommt.
Und über AViewInfo.Item.EditValue an den Wert der aktuellen Zelle auslesen kann.

Danke


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