[gelöst] Fragen zum DBGridController

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

[gelöst] Fragen zum DBGridController

Beitrag von ErnstVolker »

Guten Abend,

ich bin gerade auf einem Formular mit zwei DBGrid und zwei DBGridControllern am basteln.

https://wiki.freepascal.org/TdxDBGridController

Was mir auffällt ist, dass entgegen des letzten Bildes auf der Website das DBGrid nicht über den Objektinspektor zugeordnet werden kann. Der Eintrag DBGrid fehlt. Das ist nicht weiter tragisch, man kann das DBGrid im Quelltext zuordnen.

Code: Alles auswählen

dxDBGridController1.DBGrid:= DBGrid1;
Mein eigentliches Problem liegt aber woanders. Die obige Zuweisung mache ich in einem FormShow-Ereignis mit beiden Controllern. Das FormShow wird durch einen Button auf einer anderen Form ausgelöst. Soweit so gut.

Das Studium des Beispiels zum DBGridController lehrte mich, dass man dem DBGridController auch nil zuweisen kann:

Code: Alles auswählen

dxDBGridController.DBGrid:= nil;
Das mache im FormClose-Ereignis bei beiden Controllern. Das mache ich deshalb, weil ich feststellte, dass sich mein Programm nicht richtig beenden ließ, nachdem ich die Form Geschlossen hatte. Es gab eine SIGSEV-Meldung. Die war weg und das Programm schließt auch ohne Verzögerung, wenn ich dem Controller bei FormClose das DBGrid durch nil ersetze.

Läuft das Programm und ich öffne die Form über den Button sind beide DBGrid mit DBGridControllern zu sehen und zu bedienen. Schließe ich die Form und öffne anschließend erneut, dann ist nur noch ein DBGrid zu sehen, nämlich das was im FormShow-Ereignis in zweiter Quelltextzeile die Zuordnung des DBGrid bekommt.

Code: Alles auswählen

dxDBGridController1.DBGrid:= DBGrid1;

Code: Alles auswählen

dxDBGridController2.DBGrid:= DBGrid2;
Vertausche ich die beiden Zeilen in FormShow, dann erscheint nach dem zweiten Mal FormShow nur noch DBGrid1.

Arbeitet jemand mit dem DBGridController und kennt das Problem oder nehmt Ihr andere DBGrids mit Sortier- und Filterfunktionen (rxDBGrid oder ähnliche)?

Wenn ich in der Suche DBGridController eingäbe kommen nicht viele Antworten, das macht mich stutzig...

Viele Grüße
Zuletzt geändert von ErnstVolker am Sa 29. Jul 2023, 08:30, insgesamt 1-mal geändert.

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Fragen zum DBGridController

Beitrag von ErnstVolker »

Bin selbst auf die Lösung gekommen. Ich hatte vergessen zu erwähnen, dass beim zweiten Öffnen des Formulars, das verbliebene DBGrid das komplette Formular einnimmt, als hätte es sich über das erste DBGrid gelegt.

Da kam mir die Idee mal die Anker außer Kraft zu setzen. Das brachte aber auch nicht den gewünschten Effekt.

Die Lösung: Zwei GroupBoxen. Die DBGrids in jeweils eine Groupbox packen, dann bleiben sie beide auf dem Formular ersichtlich.

Schönen Tag!

charlytango
Beiträge: 845
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: [gelöst] Fragen zum DBGridController

Beitrag von charlytango »

Ich habe mit TdxDBGridController (noch) keine wirkliche Erfahrung außer der Demo.

Und dort weist er Autor in Zeile 351 auch selbst den DBGrid zu.
// Important we assign the grid to the controler once the grid is ready and loaded

Code: Alles auswählen

   If Assigned(dxDBGridController) Then
   Begin
      dxDBGridController.DBGrid := grdProject; 
.....
Allerdings tut er das wohl mit Absicht im OnCreate Event des Formulars auf dem DBGrid und der Controller sind.

Um hier qualifiziert helfen zu können beschreibst du einfach zu viele Parameter die man mangels Beispielcode (!) nicht beurteilen kann.

Meiner Vermutung nach liegt das seltsame Verhalten in der Art des Aufrufs des Formulars.

Ich vermute du lässt die Formulare von Lazarus automatisch erzeugen ?
Die Projektoptionen (Shift-Ctrl-F11) geben darüber Auskunft beim Punkt Formulare/Forms.
Bei mir und vielen anderen befindet sich da nur das Hauptformular das automatisch erzeugt wird. Alle anderen Formulare werden kontrolliert im Code erzeugt und auch wieder zerstört.

Damit bekommst du die SIGSEV in den Griff. Das geht sicher auch mit automatisch erzeugten Formularen, ist aber ein anderes Konzept. Ich habe da gerne die Kontrolle wann etwas passiert.

Antworten