Entwickler-Ecke
Datenbanken - Arbeitet jemand mit Devexpress QuantumGrid?
Josef-B - Di 18.01.11 19:28
Titel: Arbeitet jemand mit Devexpress QuantumGrid?
Hallo,
arbeitet evtl jemand mit dem Quantumgrid und Firebird/Interbase?
Ich hätte da eine Frage zum Speichern von Datensätzen im GridMode.
Martok - Mi 19.01.11 00:12
Vermutlich schon :gruebel:
Was ist denn die Frage? Wenn du sie nicht stellst, kann wohl auch keiner Antworten...
Nersgatt - Mi 19.01.11 08:26
Josef-B hat folgendes geschrieben : |
arbeitet evtl jemand mit dem Quantumgrid und Firebird/Interbase? |
Ja.
Josef-B - Mi 19.01.11 09:27
Ich hab das Quantumgrid 6.
Verbunden ist das Grid über ein TIBDataset
Ich setze nach dem Post das Transaction.Commit.
Wenn ich im Grid nun ein Feld ändere, und anschließend auf eine
andere Zeile klicke, dann bekomme ich immer einen
Index out of bounds.
Wenn ich das Commit nicht setze dann gehts.
Aber ich möchte möglichst schnell nach der Änderung speichern.
Wie gesagt ich arbeite im gridmode.
Jetzt hab ich mir gedacht, ich müsste eben vor dem scrollen
abspeichern, hilft auch nicht.
Über das Ereignis im View OnFocusedRecordChanged gehts auch nicht.
Nersgatt - Mi 19.01.11 10:56
Zeig mal ein bisschen Quellcode und an welcher Stelle genau der Fehler kommt.
Josef-B - Mi 19.01.11 12:54
Hier mal der Quellcode zum AfterPost.
Das wird ja automatisch durch das Dataset ausgelöst, weil beim Scrollen automatisch gespeichert wird.
der Fehler kommt aber noch vor dem Post, welche Ereignisse da zwischen dem Click in die andere Zeile
und dem Speichern des Datasets ausgelöst werden, wüsste ich auch gerne, dann könnte man es evtl. eingrenzen.
Kann man sich die Events irgendwie anzeigen lassen?
Für das Grid hab ich gar keinen Quellcode. Sind alles nur Einstellungen im ObjektInspektor.
Da habe ich aber auch eigentlich nur gridmode = true gesetzt.
Und sonst das übliche, Datasource eingetragen, keys etc.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TFAuftrag.DSPAfterPost(DataSet: TDataSet); var pos: tbookmark; begin with dsp do begin pos := getbookmark; if transaction.InTransaction then transaction.Commit; open; gotobookmark(pos); freebookmark(pos); if not isempty then edit; end; end; |
Sinspin - Mi 19.01.11 16:48
Innerhalb der Ereignisse des Grids soltest du nicht versuchen den Datensatz zu wechseln oder zu Posten. Ein Post wird von deiner DB(Tabelle) beim Datensatzwechsel automatisch ausgelößt. Was du allerdings beachten solltest, es gibt neuerdings in der View unter "OptionData" eine Option namens CancelOnExit die dummerweise per default true ist. Die bewirkt das deine Änderungen verworfen werden wenn du irgend ein Element außerhalb des Grids anclickst. Desweiteren, wenn du einem Column einen Typ gibst (Properties zuordnen) hast du dann eine Eigenschaft ImmediatePost die den im Grid eingetragenen Wert direkt in deine Datenmenge schreibt (kein Post, steht aber im Datensatz).
Möchtest du wirklich nach jeder Änderung auch ohne Datensatzwechsel Posten musst du dir eine WindowsMessage deklarieren und diese aus dem OnValidate des Columns Senden (PostMessage. Nicht SendMessage!) und dann drauf reagieren. Dadurch ist die Nachrichtenkette des Grids vollständig abgearbeitet und es sollte keine Probleme geben.
Josef-B - Mi 19.01.11 21:11
Danke Sinspin,
das mit dem CancelOnExit kannte ich auch noch nicht.
Ich habs jetzt so gelöst, dass ich die Transaction zu Firebird immer beim
Verlassen des Grids (OnExit) beende, also das Commit setze.
Das klappt ganz gut, zumindest hab ich die Fehlermeldung mit
dem Listenindex nicht mehr.
Mal sehen, was sonst noch so kommt ;-) denn das Quantumgrid finde ich
nicht so ganz einfach zu bewältigen, obwohl es ja echt ne richtig schöne
Sache ist :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!