Table of Contents

TreeView


Multicolumn Tree-Views werden typischerweise zum Darstellen von Baumstrukturen genutzt. Sie bestehen aus den Elementen Tree-View und Tree-Node.

Zum Verwalten der Spalten und deren Properties existiert ein Dialog, welcher am TreeView über das PropertyGrid oder Kontextmenü geöffnet werden kann.

TreeView

Sie haben verschiedene Möglichkeiten einen Baum zu erstellen. Die Erstellung von Tree-Views unter Framework Studio ist vor allem wegen der Unterstützung der Mehrsprachigkeit komplex. Sie werden in der Regel für jeden Tree-View eine eigene Component benötigen, in denen die Properties über eine Query oder Get / Set Methoden gefüllt werden.

Für eine einfache Auflistung ohne Verschachtelung und grafische Elemente können Sie auch eine einfache TextCollection nutzen.

Wird ein Element aus dem Baum durch Klicken ausgewählt, wird die GUID des Elements an den DataSource des Tree-Views zurückgegeben. Deshalb muss der DataSource des Tree-Views entweder den Typ der Baumelemente besitzen, wenn dieser aus homogenen Elementen besteht, oder den allgemeinen Typ Object bzw. DevFrameworkObject haben.

Sie müssen für jeden Tree-Node in den Properties eine ObjectCollection als NodeDataSource hinterlegen. Das Databinding für die einzelnen beim TreeView definierten Spalten wird an dieser NodeDataSource eingestellt. Unter Displaymembers werden alle Spalten in alphabethischer Reihenfolge aufgelistet.

Aus dem in NodeDataSource ausgewählten Objekt wählen Sie Properties als Eigenschaft für den jeweiligen Display-Member der im TreeView definierten Columns, den Value-Member, das ClosedIcon, das OpenIcon und das HasSubNodes-Flag. Da es sich bei den Icons um graphische Elemente handelt, sollten die Properties einen relativen oder absoluten Pfad zu den Grafiken enthalten.

Es empfiehlt sich, eine Datenbank-Tabelle anzulegen, welche alle benötigten Properties als Columns besitzt (ItemIDParent, ItemID, Image1, Image2, Pos, Type).

Um die Einträge mehrsprachig zu definieren, erzeugen Sie jetzt eine TextCollection. In einer Text-Collection ist es notwendig eine ID zu definieren, die der ItemID aus der Datenbank-Tabelle entsprechen sollte. Anschließend können Sie zu jeder ID mehrsprachig die Bezeichnungen hinterlegen, die in dem Tree-View angezeigt werden sollen.

Wenn Sie aus der Datenbanktabelle mit den Baum-Informationen eine Component und die dazugehörige Collection erstellt haben, öffnen Sie die Component und fügen ein IndividualReadonly-Property (sText) hinzu, das die Bezeichnung über eine Get-Methode aus der Text-Collection ermittelt. In dem Beispiel wurde zusätzlich eine private Membervariable sTextval hinzugefügt, damit die Bezeichnung aus der TextCollection nur das erste Mal ermittelt wird.

Die sText Get-Methode könnte folgendermaßen aussehen:

// sTextVal ist eine Membervariable, die sich merkt, 
// ob bereits ein Load ausgeführt wurde
if (sTextVal == ““)
{
  // Instanziieren der TextCollection
  ctTreeviewItemText oTreeviewItemText = new ctTreeviewItemText(this.Global);
  
  if (oTreeviewItemText.GetOnID( lngItemID ) == null)
  {
    // Kein Eintrag für die ID in der TextCollection vorhanden
    sTextVal = "<no entry for" + lngItemID + ">";
  }
  else
  {
    // Zuweisung der Bezeichnung
    sTextVal = oTreeviewItemText.GetOnID( lngItemID ).Text;
  }
}
return sTextVal;

Bei dem Zugriff auf das sText-Property, wird Ihnen automatisch die sprachspezifische Bezeichnung aus der Text-Collection zurückgegeben.

Die aufgezeigte Möglichkeit zur Unterstützung von Mehrsprachigkeit bei Properties kann selbstverständlich auch in vielen anderen Fällen angewandt werden.

Sie müssen nicht für jedes Treeview separate Komponenten erstellen, sondern können die vorhandenen durch Einschränkung der Load-Bedingung auf einen Typ mehrfach verwenden.

Tree-View - Rekursiver Baum

Um einen rekursiven Baum abzubilden, benötigt man eine rekursive Objekt-Struktur. Dabei ist wichtig, dass alle Objekte denselben Component-Type besitzen. Es müssen 2 Tree-Nodes angelegt werden.

Der erste Tree-Node erhält als NodeDataSource eine Collection – z.B. ein Form-Property. Diesem Tree-Node können die Eigenschaften unterhalb dem NodeDataSource (Icons, DisplayMember, …) zugewiesen werden.

Unterhalb wird ein zweiter TreeNode angelegt. Dem wird in den Properties bei der Eigenschaft ContinueEqiuvalent der erste Tree-Node zugewiesen. Als NodeDatasource muss eine Collection angegeben werden, die denselben Typ besitzt wie der NodeDataSource des ersten TreeNodes. Unterhalb dem NodeDataSource müssen dieselben Einstellungen vorgenommen werden, wie im ersten TreeNode.