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 Drei Tabellen und zwei LookupComboboxen (https://www.delphipraxis.net/162366-drei-tabellen-und-zwei-lookupcomboboxen.html)

TClever 19. Aug 2011 09:52

Drei Tabellen und zwei LookupComboboxen
 
Hallo zusammen,

ich schaue hier schon länger immer mal rein, wenn ich Problemen habe. Oft habe ich auch schon Lösungen oder zumindest Hinweise zur Lösung gefunden.
Bei meinem aktuellen Problem, weiss ich aber nicht mal, nach welchen Suchbegriffen ich suchen sollte. Ich hoffe deshalb, dass ihr mein Problem versteht und mir helfen könnt.

Zum Problem gehören drei Tabellen und zwei LookupComboBoxen:

Tabelle Prüfling
- ID
- ...
- Prüfungsart-ID
- Prüfanweisungs-ID

Tabelle Prüfungsarten
- ID
- Bezeichnung

Tabelle Prüfungsanweisungen
- ID
- Prüfungsart-ID
- Bezeichnung

Bei jedem Prüfling soll also die Art der Prüfung und die verwendete Prüfanweisung festgehalten werden. Die Prüfungsanweisung ist aber immer abhängig von der Prüfungsart.

In der Maske wählt der Benutzer deshalb erst die Prüfungsart (LookupComboBox) und dann die Prüfanweisung (LookupComboBox). Damit er nur "passende" Prüfanweisungen auswählen kann, setze ich nach Wahl der Prüfungsart einen entsprechenden Filter auf die Prüfanweisungen (ändern des Parameters in der WHERE-Bedingung der Lookup-Datenquelle).

Das funktioniert soweit.

Jetzt möchte ich aber mehrere Prüflinge gleichzeitig anzeigen (DBCtrlGrid) und bearbeiten lassen. Und da ist das Problem: Jede angezeigte LookupComboBox für Prüfanweisungen müsste einen anderen Filter haben, was bei nur einer Datenquelle natürlich nicht geht.

Wie kann ich das Lösen? Oder ist mein Ansatz schon falsch?

Thomas

Iwo Asnet 19. Aug 2011 10:34

AW: Drei Tabellen und zwei LookupComboboxen
 
Oh ja, ein vertracktes Problem...

Ich arbeite mit DevExpress-Komponenten, wo das Problem dadurch gelöst wurde, das man unterschiedliche Lookup-Datasets benutzen kann, je nachdem, ob das Feld den Fokus besitzt (d.h. editiert wird) (gefilterte Liste) oder nicht (alle Einträge).

Mir fallen spontan zwei Ansätze ein:

Möglichkeit 1:
Zunächst versiehst Du alle Lookup-Comboboxen mit dem ungefilterten Lookuplisten.
Im OnEnter der Lookup-combobox tauschst Du dann die Lookup-liste aus und im OnExit natürlich wieder zurück.

Möglichkeit 2:
Verwende eine einfache TDBComboBox und erstelle die Dropdownliste dynamisch.

TClever 19. Aug 2011 11:28

AW: Drei Tabellen und zwei LookupComboboxen
 
Hallo Iwo,

danke für die Antwort. Die beiden von dir genannten Lösungsvorschläge scheinen mir auf den ersten Blick machbar - wenn auch fummelig.

Bevor ich die angehe würde ich aber gerne noch wissen, wie die Lösung mit den DevExpress-Komponenten aussieht. In dem Projekt arbeite ich nämlich mit denen. Als Comboboxen verwende ich die TcxDBLookupComboBox (ExpressEditors 6.43). Allerdings kann ich keine Eigenschaften für unterschiedliche Lookup-Dataset finden. Oder meine DevExpress-Komponenten sind zu alt.

Thomas

Iwo Asnet 19. Aug 2011 13:18

AW: Drei Tabellen und zwei LookupComboboxen
 
Im TcxGrid geht das über das TcxGridColumn-Event "OnGetProprtiesForEdit", bei einer TcxDBLookupComboBox geht das nicht so. Hier würde ich 'fummeln'.

Fummeln musst Du sowieso. ;-)

TClever 31. Aug 2011 09:21

AW: Drei Tabellen und zwei LookupComboboxen
 
Verspäteter Nachtrag: Ich habe zur Lösung die Version mit den zwei Lookup-DataSets gewählt, die bei OnEnter und OnExit gewechselt werden. Und es war gar nicht fummelig :wink:

Ich hatte zwar angenommen, dass es funktioniert, aber auch, dass es Sonderfälle geben wird, bei denen es nicht so einfach klappt. Aber: Es gab keine Sonderfälle. Zumindest nicht in meiner Konstellation mit der LookupComboBox auf einem DBCtrlGrid.

Ich kann diese Lösung also nur empfehlen.

Thomas


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