Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2011.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erweitern Sie Ihre Anwendungen um das TreeView-Steuerelement und füllen Sie TreeViews so einfach wie nie zuvor.

Techniken

Formulare, VBA, DAO

Voraussetzungen

Access 2000 und höher

Beispieldateien

TreeViews.mdb, TreeViewConfigurator.mde

Shortlink

www.access-im-unternehmen.de/771

TreeView-Konfigurator erweitert

André Minhorst, Duisburg

Im Beitrag TreeView-Konfigurator (www.access-im-unternehmen.de/667) haben wir Ihnen den TreeView-Konfigurator vorgestellt, mit dem Sie ganz einfach TreeViews mit den Daten aus Ihren Tabellen füllen könen. Diese Lösung haben wir kräftig überarbeitet: Sie können nun noch einfacher die Daten festlegen, die im TreeView-Steuerelement landen sollen, auf mehr Ereignisse reagieren und sogar Daten aus rekursiven Beziehungen dort unterbringen. Im vorliegenden Beitrag zeigen wir Ihnen, wie Sie den TreeView-Konfigurator einsetzen.

Vorbereitung

Die aktuelle Version des TreeView-Konfigurators liegt nicht mehr in Form einzelner Tabellen, Abfragen, Formulare und Module vor, die Sie in die Zieldatenbank kopieren müssen, sondern in einer Bibliotheksdatenbank. Das bedeutet, dass Sie diese Bibliothek in Ihren Verweisen referenzieren müssen. Anschließend reicht es aus, die Bibliotheksdatenbank im gleichen Verzeichnis zu speichern, in dem sich auch die Datenbank mit dem Verweis befindet.

Insgesamt sind folgende Schritte nötig:

  • Setzen Sie einen Verweis auf die Bibliotheksdatenbank TreeViewConfigurator.mde. Dies erledigen Sie, indem Sie im Verweise-Dialog auf die Schaltfläche Durchsuchen klicken und dort die entsprechende Datei auswählen (s. Abb. 1).
  • pic013.png

    Abb. 1: Verweis auf die TreeViewConfigurator-Datenbank

  • Importieren Sie die Tabelle tblNodes der Bibliotheksdatenbank in die Zieldatenbank und leeren Sie diese gegebenenfalls.

Außerdem benötigen Sie zwingend einen Verweis auf die Bibliothek Microsoft Office x.0 Object Library.

Den TreeView-Konfigurator an Bord holen

Der TreeView-Konfigurator tritt im Wesentlichen durch das Formular frmTreeViewHandler in Erscheinung. Dieses Formular erlaubt die vollständige Konfiguration eines oder mehrerer TreeViews. Das Formular steckt allerdings, genau wie die komplette Logik des TreeView-Konfigurators, in der Bibliotheksdatenbank TreeViewConfigurator.mde. Diese Datenbank enthält eine öffentliche Prozedur namens OpenTreeViewConf zum Anzeigen des TreeView-Konfigurator-Formulars. Sie können diese nun jeweils über das Direktfenster aufrufen, aber es gibt noch eine elegantere Lösung. Dazu legen Sie einfach ein neues Formular namens frmTreeViewHandler in der Zieldatenbank an. Fügen Sie diesem Formular lediglich eine Ereignisprozedur hinzu, die durch das Ereignis Beim Öffnen ausgelöst wird und die wie folgt aussieht:

Private Sub Form_Open(Cancel As Integer)

    OpenTreeViewConf _

    "{66EAB73D-990B-42DF-B28D-D06FFA989759}"

    Cancel = True

    End Sub

Diese Prozedur öffnet mit OpenTreeViewConf das Formular frmTreeViewConf in der Bibliotheksdatenbank. Die Angabe der GUID ist nötig, damit Sie den TreeView-Konfigurator für verschiedene Anwendungen nutzen können.

Der Konfigurator zeigt dann nur die TreeView-Daten an, die zur aktuellen Anwendung gehören. Vergeben Sie daher für jede Anwendung eine neue GUID. Durch das Einstellen des Parameters Cancel auf den Wert True wird das Öffnen des entsprechenden Formulars in der Zieldatenbank abgebrochen. Auf diese Weise öffnen Sie das Formular der Bibliotheksdatenbank so, als ob es sich selbst in der Zieldatenbank befinden würde (s. Abb. 2).

pic019.png

Abb. 2: Die Benutzeroberfläche des TreeView-Handlers

Grundgerüst

Legen Sie dann ein neues, leeres Formular an und speichern Sie es unter dem gewünschten Namen. Fügen Sie ein TreeView-Steuerelement und ein ImageList-Steuerelement hinzu und stellen Sie deren Namen auf ctlTreeView und ctlImageList ein. Ziehen Sie das TreeView-Steuerelement auf die gewünschte Größe. Das ImageList-Steuerelement platzieren Sie irgendwo - es erscheint ohnehin nicht in der Formularansicht.

Dann legen Sie eine Ereignisprozedur für das Ereignis Beim Laden des Formulars an. Dieses enthält die wesentlichen Schritte zum Füllen des TreeView-Steuerelements mit den gewünschten Daten:

Private Sub Form_Load()

    Set objTreeViewHandler = _

    New clsTreeViewHandler

    With objTreeViewHandler

    Set .ImageListInst = _

    Me!ctlImageList.Object

    Set .TreeViewInst = Me!ctlTreeView.Object

    .Appearance = ccFlat

    .LineStyle = tvwRootLines

    .Style = tvwTreelinesPlusMinusPictureText

    .Indentation = 5

    .InitTreeView 1

    .FillTree

    End With

    End Sub

Die hier referenzierte Objektvariable objTreeViewHandler deklarieren Sie wie folgt im Kopf des Klassenmoduls:

Dim WithEvents objTreeViewHandler As

clsTreeViewHandler

Die Prozedur erzeugt zunächst eine neue Instanz der Steuerungsklasse für das TreeView-Steuerelement. Dann weist sie den Eigenschaften der Steuerungsklasse Verweise auf das für Icons zu verwendende ImageList-Steuerelement sowie das TreeView-Steuerelement zu. Die weiteren Eigenschaften Appearance, LineStyle, Style und Indentation sorgen für die gewünschte Optik und entsprechen den gleichnamigen Eigenschaften des TreeView-Steuerelements. Interessant und notwendig sind die beiden letzten Anweisungen: InitTreeView initialisiert das TreeView-Steuerelement und FillTree füllt es mit den festgelegten Daten.

Speichern Sie dieses Formular nun unter dem Namen frmTreeView_Basis. Sie können es dann zum Nachvollziehen der folgenden Beispiele jeweils kopieren.

Sie brauchen es dann nur unter einem dem Beispiel entsprechenden Namen zu speichern und in der folgenden Zeile der Prozedur Form_Load den Platzhalter <ID> durch den im Formular frmTreeViewConf angezeigten Wert zu ersetzen:

.InitTreeView <ID>

Der Parameter der Methode InitTreeView entspricht der ID des im Formular frmTreeViewHandler festgelegten Baums. Das bedeutet: Sie können mehrere Bäume definieren und diese in verschiedenen Formularen anzeigen.

Ein Wechsel in die Formularansicht liefert nun lediglich die Meldung, dass noch keine TreeView-Konfiguration festgelegt wurde. Dies holen Sie nun nach, wobei dieser Beitrag verschiedene Konfigurationen vorstellt.

Kunden anzeigen

Öffnen Sie erstmalig das Formular frmTreeViewConf. Dieses fragt zunächst per InputBox den Namen des ersten anzulegenden TreeViews ab (s. Abb. 3). Geben Sie hier einfach einen Namen ein, anhand dessen Sie das TreeView später identifizieren können - der Benutzer bekommt diese Bezeichnung nicht zu sehen.

pic014.png

Abb. 3: Angabe des TreeView-Namens

Das erste Beispiel soll zeigen, wie Sie die Daten einer einfachen Tabelle im TreeView anzeigen. Dazu weisen Sie folgenden Eigenschaften des neuen TreeViewConf-Datensatzes die angegebenen Werte zu:

  • Tabelle/Abfrage: tblKunden
  • Basistabelle: tblKunden
  • Primärschlüssel: KundeID (kann aus dem Kombinationsfeld ausgewählt werden)
  • Schlüssel: beliebiger Wert, beispielsweise aa. Dieser dient zur eindeutigen Identifikation der TreeView-Elemente.
  • Elementtext: Kunde (Feld, dessen Wert im Baum als Text angezeigt werden soll - ebenfalls per Kombinationsfeld auswählbar)

Die Konfiguration ist fertig, nun kopieren Sie das Basisformular frmTreeView_Basis nach frmTreeView_NurKunden und stellen die ID in der oben angegegebenen Codezeile auf den oben im Formular frmTreeViewConf angegebenen Wert für Aktuelle ID: ein (in der Beispieldatenbank steht dort der Wert 7). Wenn Sie nun in die Entwurfsansicht wechseln, sollte der Baum wie in Abb. 4 gefüllt werden.

pic001.png

Abb. 4: Ein TreeView mit Kunden-Elementen, aber ohne Images

Images hinzufügen

Jeder Kunde soll durch das gleiche Bild repräsentiert werden. Sie benötigen dazu Bilddateien in einem gängigen Format, wir haben PNGs dazu verwendet. Alle Bilddateien, die im TreeView erscheinen sollen, speichern Sie in der Tabelle tblImages. Am einfachsten gelingt dies mit dem Tool Picture2OLE (www.acciu.de/picture2ole).

Die in der Tabelle tblImages gespeicherten Bilder können Sie über eines der beiden Kombinationsfelder der Eigenschaft Icon im Formular frmTreeViewConf auswählen. Mit dem linken der beiden Kombinationsfelder legen Sie ein Feld der unter Tabelle/Abfrage angegebenen Tabelle oder Abfrage fest, das den Namen einer Bilddatei liefern soll, mit dem rechten ein Standardbild für Elemente dieser Tabelle/Abfrage.

Die erste Variante ermöglicht, dass Sie für jeden Datensatz ein individuelles Icon anzeigen können. Das bietet sich beispielsweise an, wenn Sie männliche und weibliche Kunden mit unterschiedlichen Symbolen darstellen möchten.

Als Erstes testen wir die Variante mit dem fixen Icon für alle Datensätze der Hierarchie-Ebene des Baums. Wählen Sie einen Eintrag des rechten Kombinationsfelds der Eigenschaft Icon aus. Speichern Sie den Datensatz und öffnen Sie erneut das Formular frmTreeView_NurKunden. Das Ergebnis sieht schon besser aus (s. Abb. 5).

pic002.png

Abb. 5: Kunden mit Icon

Kunden mit Root-Knoten

Die Kunden-Elemente befinden sich auf der ersten Hierarchie-Ebene des TreeView-Steuerelements. Wenn Sie nicht nur Kunden, sondern noch weitere Elemente auf der gleichen Ebene unterbringen möchten, sollten Sie diese jeweils unterhalb eines Hauptknotens organisieren. Dies ist allein deshalb praktisch, weil sich so komplette Elementgruppen ausblenden lassen.

Fügen wir der TreeView-Konfiguration also nun einen Hauptknoten für die Kunden hinzu (Beispieldatenbank: frmTreeView_KundenMitRoot, TreeView-ID 9). Dazu legen Sie im Formular frmTreeViewConf einen neuen Datensatz an, der folgende Eigenschaften enthält:

  • Generische Ebene: Wahr
  • Tabelle/Abfrage: Hier eine eindeutige Bezeichnung für diese Ebene eingeben, beispielsweise KundenRoot.
  • Schlüssel: eindeutiger Wert aus zwei Zeichen, hier ab
  • Elementtext: anzuzeigender Wert, etwa Kunden
  • Icon: im zweiten Kombinationsfeld (also als Standardbilddatei) eine Bilddatei angeben, die dieser Knoten anzeigen soll

Fügen Sie eine weitere Tabelle mit der Schaltfläche Neue Tabelle hinzu. Tragen Sie für diese genau die gleichen Daten wie für tblKunden im ersten Beispiel ein.

Nun würde das Formular frmTreeView_Kunden den Eintrag Kunden auf der gleichen Ebene wie die Kundeneinträge selbst anzeigen. Damit die Kunden unterhalb dieses Eintrags erscheinen, bearbeiten Sie nun den zuerst angelegten Datensatz im Formular frmTreeViewConf. Dort legen Sie für die Eigenschaft Übergeordnete Tabelle schlicht und einfach den Namen des Wertes von Tabelle/Abfrage des Eintrags für den Kunden-Basisknoten fest, also KundenRoot. Außerdem aktivieren Sie die Option Alle anzeigen.

Kopieren Sie das Formular frmTreeView_Base nach frmTreeView_KundenMitRoot und legen Sie in der Ereignisprozedur Beim Laden die TreeView-ID aus dem TreeViewConf-Formular fest (in der Beispieldatenbank 9).

Beim Öffnen des Formulars frmTreeView_Kunden erscheint nun der minimierte Kunden-Knoten, den Sie wie in Abb. 6 durch einen Mausklick auf das Plus-Zeichen erweitern können.

pic003.png

Abb. 6: Kunden-Hauptknoten mit Untereinträgen

Sie können auch festlegen, dass das Kunden-Basiselement direkt beim Anzeigen des Formulars ausgeklappt wird. Dazu aktivieren Sie einfach das Kontrollkästchen rechts neben der Eigenschaft Expanded-Wert für die Tabelle/Abfrage KundenRoot im Formular frmTreeViewConf. Mit dem Kombinationsfeld links daneben können Sie wiederum ein Feld auswählen, das den individuellen Expanded-Wert für jeden einzelnen Knoten für eine Tabelle/Abfrage liefert. Sie haben dann die Möglichkeit, durch entsprechenden Code das Ein-/Ausklappen-Ereignis des TreeViewHandlers abzugreifen und den Expanded-Wert in der jeweiligen Tabelle zu speichern.

Eine weitere Ebene: Projekte

Nun soll das TreeView-Steuerelement Einträge aus einer per 1:n-Beziehung verknüpften Tabelle anzeigen, in diesem Fall tblProjekte (mit den Feldern ProjektID, Projektbezeichnung und KundeID). Die Datensätze dieser Tabelle werden über das Fremdschlüsselfeld KundeID mit den Datensätzen der Kundentabelle verknüpft.

Damit diese Datensätze im TreeView-Steuerelement unterhalb der Kunden-Datensätze angezeigt werden, erstellen Sie im TreeViewConf-Formular ein neues TreeView. In einer zusätzlich zu den bestehenden Tabellen-Ebenen angelegten Ebene im TreeView-Konfigurator legen Sie die folgenden Eigenschaften fest (in der Beispieldatenbank im Formular frmTreeView_KundenMitProjekten beziehungsweise TreeView-ID 10 zu finden):

  • Tabelle/Abfrage: tblProjekte
  • Basistabelle: tblProjekte
  • Übergeordnete Tabelle: tblKunden
  • Primärschlüssel: ProjektID
  • Fremdschlüssel: KundeID
  • Schlüssel: ac
  • Elementtext: Projektbezeichnung
  • Icon: box.png als Standardwert

Dadurch, dass Sie der Eigenschaft Übergeordnete Tabelle den Wert tblKunden und der Eigenschaft Fremdschlüssel den Wert KundeID zuweisen, erkennt der TreeView-Konfigurator automatisch, dass das TreeView-Steuerelement unterhalb eines Elements aus der Tabelle tblKunden alle Elemente der Tabelle tblProjekte anzeigen soll, deren Fremdschlüsselfeld KundeID dem gleichnamigen Primärschlüsselfeld der übergeordneten Tabelle entspricht. Das Ergebnis sieht schließlich wie in Abb. 7 aus.

pic004.png

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.