Letzte Änderung 13.02.2014

 

Mit einem XdevTree lassen sich Daten, die miteinander in einer 1:n Beziehung stehen, hierarchisch abbilden. Ein Tree kann in XDEV 5 entweder mit einem speziellen Tree-Assistenten konstruiert, oder mit Hilfe einer selbstreferenzierenden Virtuellen Tabelle erzeugt werden.

 

clip0217

 

 

 

Tree mit Assistent konstruieren

 

Bei der Konstruktion eines Trees mit dem Tree-Assistenten müssen Sie für jede Hierarchie im Tree jeweils eine Virtuelle Tabelle zuweisen. Die Virtuellen Tabellen müssen durch eine 1:n Relation miteinander verknüpft sein.

 

Die Reihenfolge der Zuweisung der Virtuellen Tabellen muss gemäß der Hierarchie von oben nach unten erfolgen, z.B. 1. Hersteller > 2. Modelle > 3. Fahrzeuge. Die im Tree sichtbaren Einträge werden standardmäßig von der Hauptspalte einer Virtuellen Tabelle ausgelesen, die im VT-Editor festgelegt werden kann. Bei Virtuellen Tabellen mit mehreren Spalten kann im Tree-Assistent jedoch auch eine andere Spalte angegeben werden, aus der die Tree-Einträge ausgelesen werden sollen. Die verwendeten Virtuellen Tabellen müssen nicht zwingend im ER-Diagramm und in der Datenbank vorhanden sein.

 

ER-Diagramm HERSTELLER - MODELLE - FAHRZEUGE

clip0188

Die Tree-Einträge werden aus Virtuellen Tabellen ausgelesen, die durch eine 1:n Relation miteinander verknüpft sind.

 

Treemodel nach obigem ER-Diagramm

clip0370

Der generierte Tree.

 

 

 

1.Fügen Sie einen XdevTree in die Arbeitsfläche ein.

clip0215

2.Um den Tree bei der Initialisierung zu füllen, klicken Sie auf Ereignisse > Initialisierung > init.

3.Klicken Sie anschließend im Code-Editor die Anweisung XDEV.FillTree( ), um diese in den Editor einzufügen.

4.Legen Sie nun im folgenden Tree-Assistenten die Virtuelle Tabelle für die oberste Hierarchie fest. Klicken Sie dazu auf new und wählen Sie bei Tabelle die Virtuelle Tabelle Hersteller aus.

5.Legen Sie eine weitere Hierarchie fest. Klicken Sie dazu auf new und wählen Sie bei Tabelle die Virtuelle Tabelle Modelle aus.

6.Legen Sie abschließend eine dritte Hierarchie fest. Klicken Sie dazu auf new und wählen Sie bei Tabelle die Virtuelle Tabelle Fahrzeuge aus.

7.Legen Sie abschließend ein Datenfeld der Virtuellen Tabelle Fahrzeuge fest, das im Tree angezeigt werden soll, z.B. PREIS.

clip0216

8.Übernehmen Sie die Option Virtuelle Tabelle automatisch füllen.

9.Klicken Sie abschließend auf OK.

 

 

 

Tree Icons festlegen

 

In den Eigenschaften bei Ordner-Icon (offen), Ordner-Icon (geschlossen), Eintrag-Icon können Sie jeweils eigene Icons hinterlegen, indem Sie eine Bilddatei per Drag&Drop auf die Eigenschaft ziehen. Unterstützt werden dabei die Bildformate JPG, GIF und PNG.

 

 

 

Tree mit selbstreferenzierender Tabelle erzeugen

 

Um einen Tree dynamisch aufzubauen, müssen Sie dynamisch eine selbstreferenzierende Virtuelle Tabelle füllen und diese mit der Methode setModel( ) übergeben. Bei einer solchen Tabelle sind alle Einträge mit Hilfe einer Parent-ID miteinander verknüpft. Die Methode setModel( ) liegt beim XdevTree in zwei Varianten vor, mit denen Sie einen Tree wahlweise mit einer einzigen oder mit mehreren Roots erzeugen können. Als Root wird der erste Eintrag eines Trees bezeichnet, an dem alle anderen Einträge hängen. Bei relationalen Daten gibt es im Normalfall jedoch keinen einzelnen Root-Datensatz, sondern immer mehrere, sodass meist die setModel( ) Methode mit dem Parameter Boolean MultipleRoots zum Einsatz kommt.

 

 

1.Erzeugen Sie eine selbstreferenzierende Virtuelle Tabelle mit Daten die Sie als Tree abbilden möchten.

2.Fügen Sie einen XdevTree in die Arbeitsfläche ein.

3.Wählen Sie im Fenster Ereignisse > Initialisierung > init.

4.Rufen Sie im Code-Editor im Ereignis init die Methode setModel auf, mit der der Tree gezeichnet wird.

tree.setModel(Personen.VT,"parent_id",null,"id","parent_id","name","id", true);   

 

 

 

setModel( ) Parameter

 

VirtualTable vt - Name der Virtuellen Tabelle, welche die Tree-Daten enthält, z.B. Personen.VT.

String rootsColName - Name der Spalte (z.B. "parent_id"), die das Objekt (z.B. null) enthält, mit dem die Root identifiziert werden kann.

Object rootsID - Objekt mit dem die Root identifiziert werden kann, z.B. null.

String idColName - Name der Spalte, welche die ID der Einträge enthält, z.B. "id".

Strinig ownerColName - Name der Spalte, welche die ID des übergeordneten Eintrages (Parent) enthält, z.B. "parent_id".

String captionColName - Name der Spalte, welche den im Tree sichtbaren Eintrag enthält, z.B. "name". Jeder Tree-Eintrag besteht aus dem sichtbaren Eintrag caption und dessen ID, die unsichtbar mitgeführt wird (data).

String dataColName - Name der Spalte, welche die ID des Tree-Eintrages enthält, die bei allen Tree-Einträgen mitgeführt wird (data), z.B. "id". Jeder Tree-Eintrag besteht aus dem sichtbaren Eintrag caption und dessen ID, die unsichtbar mitgeführt wird (data).

Boolean MultipleRoots - Mit true gibt es in der Virtuellen Tabelle mehrere Datensätze, die als erste Einträge im Tree angezeigt werden und sich die anderen Datensätze anhängen lassen. Mit false wird der erste Datensatz der Virtuellen Tabelle als erster Eintrag im Tree angezeigt. Alle anderen Datensätze werden an diesen einen Eintrag angehängt. False muss nicht zwingend angegeben werden, da die Methode setModel( ) ohne diesen Parameter  dasselbe bewirkt.

 

 

 

Wichtige Eigenschaften

 

Auswahl-Modus - Hier legen Sie fest, wie Tree-Einträge selektiert werden können, nur einzeln, ganze Abschnitte oder mehrere Abschnitte.

Erster Eintrag sichtbar - Die Root wird als erster Eintrag im Tree angezeigt, an der alle anderen Einträge hängen. Falls in der Virtuellen Tabelle kein Root-Eintrag vorkommt, kann die Root hierüber ausgeblendet werden.

Haupt-Handles sichtbar - Beim Root-Eintrag wird ein Button zum Auf- und einklappen des Trees angezeigt.

Trennlinien anzeigen - Zeichnet zwischen allen Tree-Einträgen eine Trennlinie.

Komplette Zeilen verwenden - Der Tree-Eintrag nutzt die gesamte Zeile, u.a. für Hervorhebung und Mausklick-Registrierung.

Ordner-Icon (offen) - Ermöglicht die Zuweisung eines Icons, mit dem der Button zum Öffnen der Tree-Nodes ersetzt wird. Unterstützt werden die Bildformate GIF, JPG und PNG.

Ordner-Icon (geschlossen) - Ermöglicht die Zuweisung eines Icons, mit dem der Button zum Schließen der Tree-Nodes ersetzt wird. Unterstützt werden die Bildformate GIF, JPG und PNG.

Eintrag-Icon - Ermöglicht die Zuweisung eines Icons, mit dem das Standard-Icon für Tree-Einträge ersetzt wird. Unterstützt werden die Bildformate GIF, JPG und PNG.

 

 

 

Generierter Code

 

   @EventHandlerDelegate void tree_init() 

   {

      try

      {

         XDEV.FillTree(new FillTree()

         {

            @Override

            public void init()

            {

               setTree(tree);

               addGroup(Hersteller.VT,"MARKE",true);

               addGroup(Modelle.VT,"MODELL",true,Modelle.HERSTELLER_ID,Hersteller.ID);

               addGroup(Fahrzeuge.VT,"PREIS",true,Fahrzeuge.MODELL_ID,Modelle.ID);

            }

         });

      }

      catch(DBException e)

      {

         e.printStackTrace();

      }

   }

 

Wichtigste Methoden

 

getRoot()

 

Gibt den Stammknoten des XdevTrees zurück.

Rückgabewert: Das Stammverzeichnis des XdevTrees oder null, falls der Tree keinen Knoten besitzt.

//Gibt den Root des XdevTrees zurück
XdevTreeNode node = tree.getSelectedNode();

 

getSelectedNode()

 

Gibt die (erste) ausgewählte XdevTreeNode zurück.

Rückgabewert: Die selektierte XdevTreeNode.

//Gibt den ausgewählten Knoten zurück
TreeNode node = tree.getSelectedNode();

 

expandAll

 

Klappt bestimmte Knoten und Subknoten des XdevTrees aus, abhängig von der aufgerufenen Überladung.

 

Wichtigste Überladungen:

expandAll()

// Alle Nodes des XdevTrees werden ausgeklappt
tree.expandAll();

 

expandAll(TreeNode node) 

node - Der Knoten, dessen Einträge und Unterknoten ausgeklappt werden sollen.

//Gibt den selektierten Knoten zurück
TreeNode node = tree.getSelectedNode();
 
// Alle Einträge und Unterknoten des übergebenen Knotens werden ausgeklappt
tree.expandAll(node);

 

collapseAll()

 

Klappt alle Knoten des XdevTrees ein.

// Alle Nodes des XdevTrees werden eingeklappt
tree.collapseAll();

 

expandNode(XdevTreeNode node)

 

Die übergebene XdevTreeNode wird ausgeklappt. Unterknoten bleiben unverändert.

node - Die XdevTreeNode, die ausgeklappt werden soll.

//Gibt den selektierten Knoten zurück
TreeNode node = tree.getSelectedNode();
 
// Der selektierte Knoten wird ausgeklappt
tree.expandNode(node);

 

collapseNode(XdevTreeNode node)

 

Die übergebene XdevTreeNode wird eingeklappt. Unterknoten bleiben unverändert.

node - Die XdevTreeNode, die eingeklappt werden soll.

//Gibt den selektierten Knoten zurück
TreeNode node = tree.getSelectedNode();
 
// Der selektierte Knoten wird eingeklappt.
tree.collapseNode(node);

 

 

setModel

 

Legt das verwendete Model für diesen XdevTree anhand einer Virtuellen Tabelle fest.

 

Wichtigste Überladungen:

setModel(VirtualTable vt, String rootsColumnName, Object rootsID, String idColumnName, String ownerColumnName, String captionColumnName, String dataColumnName, boolean multipleRoots)

vt - Die Virtuelle Tabelle, welche die Daten für den zu füllenden XdevTree enthält

rootsColumnName - Der Spaltenname für den Stammknoten

rootsID - Die ID des Stammknotens

idColumnName - Der Spaltenname der ID-Spalte.

ownerColumnName - Der Spaltenname für die Spalte, die den Fremdschlüssel für den übergeordneten Datensatz enthält.

captionColumnName - Der Spaltenname für die Spalte, welche die Beschriftung der Knoten enthält.

dataColumnNamevt - Der Spaltenname der Spalte, die die Daten enthält.

multipleRoots - Legt fest, ob es einen Dummy-Stammknoten mit mehreren Unterstämmen oder nur einen Stammknoten gibt.

// Dem Tree wird ein Model zugewiesen, welches eine selbstreferenzierende VT "Table" auflöst
tree.setModel(Table.VT,"id",0,"id","parentID","caption","id", false);

 

setModel(VirtualTable vt, String rootsColumnName, Object rootsID, String idColumnName, String ownerColumnName, String captionColumnName, String dataColumnName) 

 Diese Überladung nutzt die gleichen Parameter wie die oben beschriebene setModel-Methode, allerdings wird hier der Parameter multipleRoots automatisch als false übergeben.

// Dem Tree wird ein Model zugewiesen, welches eine selbstreferenzierende VT "Table" auflöst
tree.setModel(Table.VT,"id",0,"id","parentID","caption","id");