|
01.11.2009
Combobox Master-Detail
Für dieses Beispiel benötigen Sie die Beispiel-Datenbank FAHRZEUGE und das Projekt fahrzeuge.xdev.
In vielen Fällen macht es Sinn, die Auswahlmöglichkeit einer Combobox einzugrenzen, insbesondere wenn die Auswahlliste Werte verschiedener Obergruppen enthält, z.B. Modelle unterschiedlicher Hersteller. Eine entsprechende Filterung lässt sich u.a. mit Hilfe einer Master-Combobox umsetzen. Diese wird mit den Werten der Obergruppe gefüllt, z.B. mit Hersteller. Erst nach einer Auswahl wird mit den entsprechenden Infos eine Filter-Bedingung für eine zweite Datenbankabfrage abgeleitet, mit der dann die Detail-Combobox gezielt mit den gefilterten Werten gefüllt werden kann.

| 1. | Fügen Sie zwei Comboboxen untereinander auf die Arbeitsfläche ein. |
Füllen der Master-Combobox:
| 2. | Selektieren Sie die obere Combobox, wechseln Sie in den Code-Editor und wählen Sie das Ereignis ON_SHOW ( ) | XDEV NLS: Nach der Darstellung ( ) aus |
| 3. | Fügen Sie eine Datenbankabfrage XDEV Query | XDEV NLS: XDEV Datenbankabfrage in den Code-Editor ein und klicken Sie diese an, um den SQL-Assistenten aufzurufen. Klicken Sie die Datenbank-Tabelle HERSTELLER an, um alle Datenfelder dieser Tabelle zu selektieren. Übernehmen Sie die vom SQL-Assistenten automatisch angebotene Virtuelle Ziel-Tabelle #HERSTELLER und klicken Sie auf OK, um den SQL-Assistenten zu schließen. |
| 4. | Klicken Sie die Combobox an, um alle Methoden der Combobox in der Bibliothek anzuzeigen. Scrollen Sie in der Bibliothek ganz nach unten, öffnen Sie den Zweig bei XdevItemList listItems | XDEV NLS: XdevLeistEinträge listenEinträge und fügen Sie die Methode fillFromVT ( ) | XDEV NLS: fülleAusVirtuellerTabelle ( ) per Drag&Drop in den Code-Editor ein. Legen Sie im folgenden Parameter-Dialog zuerst die Virtuelle Quell-Tabelle fest und wählen Sie dazu die Virtuelle Tabelle #HERSTELLER aus. Legen Sie in der zweiten Zeile das Datenfeld MARKE fest, aus der die Listbox-Einträge ausgelesen werden sollen. Legen Sie schließlich in der dritten Zeile das Datenfeld ID fest, aus der die IDs der Combobox-Einträge ausgelesen werden sollen und klicken Sie abschließend auf OK. |
Füllen der Detail-Combobox:
| 6. | Ermitteln Sie zuerst die Hersteller-ID aus dem gewählten Combobox-Eintrag. Legen Sie dazu eine Ganzzahl-Variable herstellerID an und weisen Sie dieser die ID des ausgewählten Combobox-Eintrages zu. Geben Sie dazu Int herstellerID = | XDEV NLS: Ganzzahl herstellerID = in den Code-Editor ein, klicken Sie dann die obere Combobox an, um erneut alle Methoden der Combobox in der Bibliothek anzuzeigen und ziehen Sie die Methode getSelectedData ( ) | XDEV NLS: holeSelektierteDaten ( ) in den Code-Editor hinter =. |
| 7. | Fügen Sie eine Datenbankabfrage XDEV Query | XDEV NLS: XDEV Datenbankabfrage in den Code-Editor ein und klicken Sie diese an, um den SQL-Assistenten aufzurufen. Klicken Sie die Datenbank-Tabelle MODELLE an, um alle Datenfelder dieser Tabelle zu selektieren. Übernehmen Sie die vom SQL-Assistenten automatisch angebotene Virtuelle Ziel-Tabelle #MODELLE und klicken Sie auf OK, um den SQL-Assistenten zu schließen. |
| 8. | Klicken Sie die Combobox an, um alle Methoden der Combobox in der Bibliothek anzuzeigen. Scrollen Sie in der Bibliothek ganz nach unten, öffnen Sie den Zweig bei XdevItemList listItems | XDEV NLS: XdevLeistEinträge listenEinträge und fügen Sie die Methode fillFromVT ( ) | XDEV NLS: fülleAusVirtuellerTabelle ( ) per Drag&Drop in den Code-Editor ein. Legen Sie im folgenden Parameter-Dialog zuerst die Virtuelle Quell-Tabelle fest und wählen Sie dazu die Virtuelle Tabelle #HERSTELLER aus. Legen Sie in der zweiten Zeile das Datenfeld MODELL fest, aus der die Listbox-Einträge ausgelesen werden sollen. Legen Sie schließlich in der dritten Zeile das Datenfeld ID fest, aus der die IDs der Combobox-Einträge ausgelesen werden sollen und klicken Sie abschließend auf OK. |
Füllen der Master-Combobox:
1
2
3
4
5
|
ON_SHOW ( )
{
XDEV Query #HERSTELLER << HERSTELLER;
this.listItems.fillFromVT(#HERSTELLER, "MARKE", "ID");
}
|
ON_SHOW ( )
Führt den Code bei der Darstellung der Combobox aus.
XDEV Query #HERSTELLER << HERSTELLER;
Datenbankabfrage. Selektiert die Datenfelder ID und MARKE und holt alle Datensätze der Datenbank-Tabelle HERSTELLER.
Abfragebedingung: keine.
this.listItems.fillFromVT(#HERSTELLER, "MARKE", "ID");
Füllt die Combobox mit den Daten aus der Virtuellen Tabelle #HERSTELLER. Die sichtbaren Combobox-Einträge werden aus dem Datenfeld MARKE ausgelesen, die jeweiligen IDs aus dem Datenfeld ID.
Füllen der Detail-Combobox:
1
2
3
4
5
6
|
ON_SELECTION_CHANGE ( )
{
Int herstellerID = this.getSelectedData();
XDEV Query #MODELLE << MODELLE;
Combobox2.listItems.fillFromVT(#MODELLE, "MODELL", "ID");
}
|
ON_SELECTION_CHANGE ( )
Führt den Code bei der Darstellung der Combobox aus.
Int herstellerID = this.getSelectedData();
Legt eine Int-Variable herstellerID an und weist dieser die ID des selektierten Eintrages zu.
XDEV Query #MODELLE << MODELLE;
Datenbankabfrage: Selektiert in der Datenbank-Tabelle HERSTELLER die Datenfelder ID und MODELL.
Abfragebedingung: Holt nur die Datensätze, bei denen die HERSTELLER_ID = herstellerID.
this.listItems.fillFromVT(#HERSTELLER, "MARKE", "ID");
Füllt die Combobox mit den Daten aus der Virtuellen Tabelle #HERSTELLER. Die sichtbaren Combobox-Einträge werden aus dem Datenfeld MARKE ausgelesen, die jeweiligen IDs aus dem Datenfeld ID.
|
Füllen der Master-Combobox:
1
2
3
|
ON_SHOW ( )
XDEV Query #HERSTELLER << HERSTELLER
This.listItems.fillFromVT(#HERSTELLER, "MARKE", "ID")
|
ON_SHOW ( )
Führt den Code bei der Darstellung der Combobox aus.
XDEV Query #HERSTELLER << HERSTELLER;
Datenbankabfrage. Selektiert die Datenfelder ID und MARKE und holt alle Datensätze der Datenbank-Tabelle HERSTELLER.
Abfragebedingung: keine.
this.listItems.fillFromVT(#HERSTELLER, "MARKE", "ID");
Füllt die Combobox mit den Daten aus der Virtuellen Tabelle #HERSTELLER. Die sichtbaren Combobox-Einträge werden aus dem Datenfeld MARKE ausgelesen, die jeweiligen IDs aus dem Datenfeld ID.
Füllen der Detail-Combobox:
1
2
3
4
|
ON_SELECTION_CHANGE ( )
Int herstellerID = this.getSelectedData()
XDEV Query #MODELLE << MODELLE
Combobox2.listItems.fillFromVT(#MODELLE, "MODELL", "ID")
|
ON_SELECTION_CHANGE ( )
Führt den Code bei der Darstellung der Combobox aus.
Int herstellerID = this.getSelectedData()
Legt eine Int-Variable herstellerID an und weist dieser die ID des selektierten Eintrages zu.
XDEV Query #MODELLE << MODELLE
Datenbankabfrage: Selektiert in der Datenbank-Tabelle HERSTELLER die Datenfelder ID und MODELL.
Abfragebedingung: Holt nur die Datensätze, bei denen die HERSTELLER_ID = herstellerID.
this.listItems.fillFromVT(#HERSTELLER, "MARKE", "ID")
Füllt die Combobox mit den Daten aus der Virtuellen Tabelle #HERSTELLER. Die sichtbaren Combobox-Einträge werden aus dem Datenfeld MARKE ausgelesen, die jeweiligen IDs aus dem Datenfeld ID.
|
Füllen der Master-Combobox:
1
2
3
|
Nach der Darstellung ( )
XDEV Datenbankabfrage #HERSTELLER << HERSTELLER
Lokal\listenEinträge\fülleAusVirtuellerTabelle(#HERSTELLER, "MARKE", "ID")
|
ON_SHOW ( )
Führt den Code bei der Darstellung der Combobox aus.
XDEV Query #HERSTELLER << HERSTELLER;
Datenbankabfrage. Selektiert die Datenfelder ID und MARKE und holt alle Datensätze der Datenbank-Tabelle HERSTELLER.
Abfragebedingung: keine.
this.listItems.fillFromVT(#HERSTELLER, "MARKE", "ID");
Füllt die Combobox mit den Daten aus der Virtuellen Tabelle #HERSTELLER. Die sichtbaren Combobox-Einträge werden aus dem Datenfeld MARKE ausgelesen, die jeweiligen IDs aus dem Datenfeld ID.
Füllen der Detail-Combobox:
1
2
3
4
|
Bei Änderung Auswahl ( )
Ganzzahl herstellerID = Lokal\holeSelektierteDaten()
XDEV Datenbankabfrage #MODELLE << MODELLE
Combobox2\listEinträge\fülleAusVirtuellerTabelle(#MODELLE, "MODELL", "ID")
|
Bei Änderung Auswahl ( )
Führt den Code bei der Darstellung der Combobox aus.
Ganzzahl herstellerID = Lokal\holeSelektierteDaten()
Legt eine Ganzzahl-Variable herstellerID an und weist dieser die ID des selektierten Eintrages zu.
XDEV Datenbankabfrage #MODELLE << MODELLE
Datenbankabfrage: Selektiert in der Datenbank-Tabelle HERSTELLER die Datenfelder ID und MODELL.
Abfragebedingung: Holt nur die Datensätze, bei denen die HERSTELLER_ID = herstellerID.
Combobox2\listEinträge\fülleAusVirtuellerTabelle(#MODELLE, "MODELL", "ID"))
Füllt die Combobox mit den Daten aus der Virtuellen Tabelle #HERSTELLER. Die sichtbaren Combobox-Einträge werden aus dem Datenfeld MARKE ausgelesen, die jeweiligen IDs aus dem Datenfeld ID.
|
|