Combobox Master-Detail

Previous  Next

 

 

 

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.

 

clip0480

 

 

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 hmtoggle_plus1 ON_SHOW ( ) | XDEV NLS: Nach der Darstellung ( ) aus
3.Fügen Sie eine Datenbankabfrage hmtoggle_plus1 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 hmtoggle_plus1 XdevItemList listItems | XDEV NLS: XdevLeistEinträge listenEinträge und fügen Sie die Methode hmtoggle_plus1 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:

 

5.Wählen Sie nun das Ereignis hmtoggle_plus1 ON_SELECTION_CHANGE ( ) | XDEV NLS: Bei Änderung Auswahl ( ) aus.
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 hmtoggle_plus1 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 hmtoggle_plus1 getSelectedData ( ) | XDEV NLS: holeSelektierteDaten ( ) in den Code-Editor hinter =.
7.Fügen Sie eine Datenbankabfrage hmtoggle_plus1 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 hmtoggle_plus1 XdevItemList listItems | XDEV NLS: XdevLeistEinträge listenEinträge und fügen Sie die Methode hmtoggle_plus1 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.

 

 

hmtoggle_plus1XDEV Object Language

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.

hmtoggle_plus1XDEV Basic

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.

hmtoggle_plus1XDEV NLS

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.