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/)
-   -   Delphi cxGrid: Zelle editierbar machen (https://www.delphipraxis.net/136142-cxgrid-zelle-editierbar-machen.html)

Windwalker 24. Jun 2009 09:31


cxGrid: Zelle editierbar machen
 
Hallo!

Ich arbeite an einem Grid, welches eine DB-Tabelle von Items einliest und deren Bezeichnung im Grid anzeigt.
Das Grid gibt dem User die Möglichkeit, diese Bezeichnung von einem (oder mehrerer) Item(s) zu ändern.
Hierzu habe ich eine Spalte 'Bezeichnung' und 'Bezeichnung_alt' (unsichtbar, zum Puffern der ursprünglichen Einträge).
'Bezeichnung_alt' ist über DataBinding mit der entsprechenden Spalte der DB-Tabelle verknüpft und lädt so beim Öffnen des Grid die Datensätze ein.
Anschließend werden mittels einer FOR-Schleife alle Bezeichnungen von 'Bezeichnung_alt' nach 'Bezeichnung' kopiert.
Der Benutzer kann die Zellen der Spalte 'Bezeichnung' nun ändern.
Beim Klick auf OK können nun mittles Vergleich von 'Bezeichnung_alt' und 'Bezeichnung' Änderungen erkannt werden.

Nun habe ich folgendes Performance-Problem:
Die zugrunde liegende Tabelle hat mittlerweile fast 7000 Einträge.
Nach dem Öffnen des Grids ist die Iteration, welche 'Bezeichnung_alt' nach 'Bezeichnung' kopiert enorm langsam.

Ich suche nun einen Weg, mir diese Schleife zu ersparen.
Verknüpfe ich über DataBinding->FieldName 'Bezeichnung' auch mit dem Feld aus der Query, so kann ich im Grid die Einträge in den Zellen nicht mehr editieren.

Könnt ihr weiterhelfen?
Ich denke, ich brauche schon die beiden Zellen, um Änderungen zu erkennen, sonst müsste ich ja immer die ganze Tabelle zurückschreiben....
Wie bekomme ich dann die Einträge sowohl in 'Bezeichnung_alt' und 'Bezeichnung' ohne die langsame FOR-Schleife?

Viele Grüße,
Sascha.

Windwalker 24. Jun 2009 10:15

Re: cxGrid: Zelle editierbar machen
 
Noch eine Bemerkung:

Ich habe gerade festgestellt, dass für die Spalte ValueType=String unter DataBinding gesetzt werden muss, damit Eingaben in der Zelle zur Laufzeit gemacht werden können.

Setze ich bei FieldName nun das entsprechende Feld aus der Query ein, um beim Ausführen der Query die Zelle automatisch zu füllen, kann ValueType nicht mehr auf String gesetzt werden und es können keine Eingaben mehr gemacht werden...


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