Letzte Änderung 26.04.2011

 

XDEV 5 bietet Ihnen die Möglichkeit, eine XdevTable mit einem XdevFormular zu verknüpfen. Dadurch wird ein in der XdevTable selektierter Datensatz automatisch in das XdevFormular übertragen. Um dies zu erreichen, müssen Sie lediglich bei der XdevTable Eigenschaften Verbundenes Formular das zu verknüpfende XdevFormular auswählen.

 

 

1.Fügen Sie eine XdevTable in die Arbeitsfläche ein und verbreitern Sie diese.

clip0086

2.Ziehen Sie die Virtuelle Tabelle Fahrzeuge aus dem Projektmanagement per Drag&Drop auf die XdevTable.

3.Lassen Sie sich von der Virtuellen Tabelle Fahrzeuge ein Formular generieren. Ziehen Sie dazu die Virtuelle Tabelle Fahrzeuge aus dem Projektmanagement per Drag&Drop in die Arbeitsfläche und klicken Sie im folgenden Formular-Assistenten auf OK, um sämtliche Standardeinstellungen zu übernehmen.

4.Verknüpfen Sie die XdevTable nun mit dem Formular. Klicken Sie dazu die XdevTable an und wählen Sie in den Eigenschaften bei Verbundenes Formular > formular aus.

clip0180

 

 

 

Intern

 

Nach der Selektierung eines Datensatzes in der Table wird zuerst der Index der selektierten Table-Zeile ermittelt. Mit dem Index kann anschließend die ID des selektierten Datensatzes ermittelt und aus der Virtuellen Tabelle ausgelesen werden. Voraussetzung ist, dass in der Virtuellen Tabelle ein Datenfeld mit der Bezeichnung ID existiert und als Primärschlüssel gekennzeichnet ist. Mit Hilfe der Datensatz-ID erfolgt anschließend eine erneute Datenbankabfrage. Dadurch wird gewährleistet, dass immer die aktuelle Version des selektierten Datensatzes in das Formular übertragen wird. Falls es sich in der Virtuellen Tabelle um gejointe Daten handelt, wird die Abfrage automatisch auf die entsprechende Haupttabelle durchgeführt, da gejointe Daten nicht in ein Formular übertragen werden können. Anschließend wird der Datensatz der Haupttabelle in das Formular übertragen, wo dieser editiert werden kann.

 

clip0183

 

Die Table auf dem Bildschirm enthält i.d.R. gejointe Daten aus verschiedenen Tabellen.  Diese dienen nur für die Ausgabe.


clip0184

 

Intern erfolgt nach der Selektierung eines Datensatzes eine Abfrage auf die Haupttabelle, hier Fahrzeuge. Als Ergebnis

wird nur 1 Datensatz zurückgegeben, der dann in das Formular übertragen wird.

 

 

Konventionelle Vorgehensweise

 

4.Klicken Sie die Table an und wählen Sie im Quickinfo Ereignisse > Auswahl > valueChanged.

5.Ermitteln Sie den Index der selektierten Zeile. Lesen Sie anschließend die ID des selektierten Fahrzeug-Datensatzes aus.

int zeile = table.getSelectedRow();

int fahrzeugeID = FahrzeugeJoin.VT.getValueAt(zeile,FahrzeugeJoin.VT.ID);

6.Fragen Sie die Tabelle Fahrzeuge ab und geben Sie eine Filter-Bedingung an, mit der nach der ermittelten Fahrzeug-ID gesucht wird. Fügen Sie dazu eine Datenbankabfrage XDEV.Query( ) in den Code-Editor ein. Selektieren Sie alle Datenfelder der Datenbank-Tabelle Fahrzeuge und übernehmen Sie bei Ziel (Virtuelle Tabelle) die vorgeschlagene Virtuelle Tabelle Fahrzeuge.

clip0181

7.Geben Sie bei Filter die Filter-Bedingung FAHRZEUGE.ID = FahrzeugeID an, um den Datensatz mit der ermittelten Fahrzeug-ID zu suchen und klicken Sie auf OK, um den Query-Assistenten zu schließen.

clip0182

8.Übertragen Sie den ermittelten Datensatz in das Formular. Da die Virtuelle Tabelle Fahrzeuge nur 1 Datensatz enthalten kann, muss dieser den Index 0 besitzen.

formular.setModel(0,Fahrzeuge.VT);

 

 

Source-Code

 

int zeile = table.getSelectedRow();

int fahrzeugeID = FahrzeugeJoin.VT.getValueAt(zeile,FahrzeugeJoin.VT.ID);

try

   {

    XDEV.Query(new Query(fahrzeugeID)

    {

        @Override

        public void init()

        {

               final int fahrzeugeID = getArg(int.class);

               

               setDataSource(fahrzeugeDB.DB);

               

               select("ID").into(Fahrzeuge.ID);

               select("BILDPFAD").into(Fahrzeuge.BILDPFAD);

               select("MODELL_ID").into(Fahrzeuge.MODELL_ID);

               select("LEISTUNG").into(Fahrzeuge.LEISTUNG);

               select("ERSTZULASSUNG").into(Fahrzeuge.ERSTZULASSUNG);

               select("KILOMETERSTAND").into(Fahrzeuge.KILOMETERSTAND);

               select("FAHRZEUGTYP_ID").into(Fahrzeuge.FAHRZEUGTYP_ID);

               select("FAHRZEUGART_ID").into(Fahrzeuge.FAHRZEUGART_ID);

               select("KRAFTSTOFF_ID").into(Fahrzeuge.KRAFTSTOFF_ID);

               select("GETRIEBE_ID").into(Fahrzeuge.GETRIEBE_ID);

               select("FARBE_ID").into(Fahrzeuge.FARBE_ID);

               select("PREIS").into(Fahrzeuge.PREIS);

               from("FAHRZEUGE");

               where(getColumn("FAHRZEUGE","ID").eq("?"),fahrzeugeID);

               

               setVirtualTable(Fahrzeuge.VT);

               setFillMethod(VirtualTableFillMethod.OVERWRITE);

            }

         });

      }

      catch(DBException e)

      {

         e.printStackTrace();

      }

 

      formular.setModel(0,Fahrzeuge.VT);