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 DevExpress cxGrid und LayoutControll neuer Datensatz. (https://www.delphipraxis.net/189814-devexpress-cxgrid-und-layoutcontroll-neuer-datensatz.html)

stOrM 25. Jul 2016 18:01

DevExpress cxGrid und LayoutControll neuer Datensatz.
 
Moin,
ich denke mal ich habe irgendwo in dem Wust von Einstellungen eventuell etwas falsch stehen.
Das Problem ist das ich meiner Anwendung zwei Button verwende Neu zum anlegen eines neuen Datensatzes und Edit zum editieren eines vorhandenen Datensatzes.
Beim editieren gibt es keine Probleme das Grid steht auf dem zu editierenden Datensatz im LayoutControl kann ich über diverse Editfelder die Daten beliebig ändern.

Beim hinzufügen eines neuen Datensatzes passiert folgendes:
Grid hat den Fokus, man klickt auf Neu, die Editfelder im LayoutControl sind leer, beim klick auf eines der Editfelder im LayoutControl springt das Grid plötzlich auf einen vorhandenen Datensatz (meist der erste in der Tabelle)

Lustigerweise, wenn das Grid nicht den Fokus hat sprich ich klicke bevor ich auf den Neu Button klicke erstmal auf das LayoutControl kein Problem dann bleibt das Grid auf dem neuen Datensatz stehen und wechselt nicht auf einen alten.

Nun dachte ich ok, also vor Neu klick fokus woanders hin werfen. Nöö bringt nichts.
Dann hab ich nach einigen (man kann schon sagen Stunden durch sämtliche Properties des Grids folgendes gefunden:

Delphi-Quellcode:
cxGrid1DBTableView1.DataController.DataModeController.SyncMode := False;


behebt das Problem zwar, allerdings muss ich nach dem Append selbiges wieder auf True setzen das sonst ein klick auf das Grid den Datensatz im LayoutControl nicht mehr aktualisiert.

Gut ich kann notfalls damit leben aber ich frage mich was das Problem ist bzw. wie man das ganze behebt. (Mir ist bekannt das man nicht direkt über die DatenControls auf Daten zugreifen bzw. diese ändern sollte ich werde das bei Zeiten mal in Listen umändern.)

dataspider 25. Jul 2016 18:43

AW: DevExpress cxGrid und LayoutControll neuer Datensatz.
 
Hi

Wie ist die Grid eingestellt.

GridMode (True, False)

Was machst du beim Klick auf den Button Neu
DataSet.Append oder über das GridView -> DataController.Append

Je nach GridMode gibt es da verschiedene Fallstricke...

Frank

stOrM 25. Jul 2016 18:57

AW: DevExpress cxGrid und LayoutControll neuer Datensatz.
 
Gridmode = False
Append = Uniquery.append

dataspider 25. Jul 2016 19:09

AW: DevExpress cxGrid und LayoutControll neuer Datensatz.
 
Ich benutze bei GridMode := False DataController.Append...
SyncMode sollte eigentlich auf True stehen. :?

Je nach Datenbank und Verfügbarkeit des Primary Key' s sollte das (die) PK - Feld (er) unter KeyFieldNames zugewiesen werden.
IMHO benutzt DevExpress diesen Wert zur Positionierung.

Ist KeyFieldNames gesetzt?


Frank

stOrM 25. Jul 2016 19:13

AW: DevExpress cxGrid und LayoutControll neuer Datensatz.
 
Zitat:

Zitat von dataspider (Beitrag 1343343)
Ich benutze bei GridMode := False DataController.Append...
SyncMode sollte eigentlich auf True stehen. :?

Je nach Datenbank und Verfügbarkeit des Primary Key' s sollte das (die) PK - Feld (er) unter KeyFieldNames zugewiesen werden.
IMHO benutzt DevExpress diesen Wert zur Positionierung.

Ist KeyFieldNames gesetzt?


Frank

KeyFieldNames nein nicht gesetzt.
Was mich wundert wieso beim editieren, das Problem nicht auftritt und beim append auch nicht wenn das Grid den Fokus verliert bzw OnExit ausgelöst wird.
DB = MySQL
Verbindung über UniDac

Also nur zur Verständnis, dass Grid benutze ich nur zur Anzeiger und Navigation durch die Datensätze, editiert wird im Grid nichts.

dataspider 25. Jul 2016 19:28

AW: DevExpress cxGrid und LayoutControll neuer Datensatz.
 
Ich bin mir ziemlich sicher, dass KeyFieldNames das Problem lösen würde.

Wenn du als PK z.B. ein Feld ID hast, dann positioniert er anhand dieses Wertes.
Bei Append wäre das Null (sofern auf der DB erzeugt) oder halt eine neue ID.
Dann sollte das Sync auch ordentlich funktionieren.

Frank

stOrM 25. Jul 2016 19:29

AW: DevExpress cxGrid und LayoutControll neuer Datensatz.
 
Zitat:

Zitat von dataspider (Beitrag 1343349)
Ich bin mir ziemlich sicher, dass KeyFieldNames das Problem lösen würde.

Wenn du als PK z.B. ein Feld ID hast, dann positioniert er anhand dieses Wertes.
Bei Append wäre das Null (sofern auf der DB erzeugt) oder halt eine neue ID.
Dann sollte das Sync auch ordentlich funktionieren.

Frank

Hört sich logisch an, ich werd es morgen mal testen, erst mal vielen Dank bis hier her.

stOrM 26. Jul 2016 05:02

AW: DevExpress cxGrid und LayoutControll neuer Datensatz.
 
So Keyfieldnames auf ID gesetzt, aber das Ergebnis ist das selbe, wie zuvor, scheint also nicht die Lösung des Problems zu sein.

TRomano 26. Jul 2016 07:26

AW: DevExpress cxGrid und LayoutControll neuer Datensatz.
 
Hast Du denn auch sicher gestellt, dass nach dem Posten (bei Append) die neue ID über die TUniQuery zurückkommt ?

dataspider 26. Jul 2016 08:34

AW: DevExpress cxGrid und LayoutControll neuer Datensatz.
 
Ich kann das Verhalten nicht nachvollziehen.
Habe allerdings auch kein MySQL und auch kein UniDAC.

Mir Firebird und IBO verhält es sich wie erwartet, SyncMode ist und bleibt True.

Hast du mal mit dxMemData einen Test gemacht?
Wenn du dort das Verhalten nicht hast, kann es auch an den Einstellungen von UniDAC liegen.

Der Support von DevExpress ist zwar gut, aber ohne lauffähiges Testprojekt wird es sicher auch nicht einfach.

Frank


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