Combobox im DBGrid

Forum für alles rund um die MSEide und MSEgui
Antworten
mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Combobox im DBGrid

Beitrag von mse »

Christian hat geschrieben:Wiso macht ihr euch das leben so schwer, jedes Column vom DBGrid hat ne Picklist wenn da werte drin stehn zeigt das dbGrid von sich aus schon ne combobox als inplace Editor an.

Ich nehme mal Christians Kommentar auf und schildere wie es in MSEgui gemacht wird. ;-)
MSEgui hat die Komponenten twidgetgrid und tdbwidgetgrid. In twidgetgrid können beliebige Edit-Komponenten eingefügt werden und bilden dabei eine Spalte des entsprechenden Datentyps. tintegeredit bildet eine Integer-Spalte, tstringedit ein Spalte mit strings usw. tdbwidgetgrid arbeitet analog mit den DB-Edit-Komponenten (tdbintegeredit, tdbstringedit....). Durch diesen Mechanismus können nun auch komplexe (tdropdownlistedit, tfilenameedit, tenumedit, tcalendardatetimeedit...) oder nicht textbasierende Komponenten (tdataicon, tbooleanedit, tbooleaneditradio, tdatabutton...) im Gitter dargestellt werden.
Erwähnenswert ist dabei, dass die eingesetzten Komponenten ganz normal funktionieren, das heisst, alle Eigenschaften und Ereignisse können normal benutzt werden. Im Falle der Combobox im DBGrid platziert man ein tdbdropdownlistedit im tdbwidgetgrid und setzt die gewünschten Eigenschaften, das ist alles.
Ein anderes Thema, wie man sich mit MSEgui das Leben einfacher machen kann, sind die Lookup-Widgets. MSEgui hat eine ganze Reihe von entsprechenden Komponenten die auf Datasets oder die sehr schnellen tlookupbuffer oder tdblookupbuffer zugreifen. Alle diese Widgets haben eine inkrementelle Suchfunktion.
Beispiel: '"r" eingeben, die erste Zeile die mit 'r' beginnt wird markiert, 'a' eingeben, die erste Zeile die mit 'ra' beginnt wird markiert.
Anbei ein Beispiel wie es zur Entwurfs- und zur Laufzeit aussehen kann.

Martin

design.png
run.png

Antworten