Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
TreeView ohne ActiveX mit Access Bordmitteln
zurück: "LINQ for VBA" - Dynamisches SQL ohne Stringkaprio weiter: Datenpflege von m:n Datensätze über Kontrollkästchen Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Bitsqueezer
Office-VBA-Programmierer


Verfasst am:
11. Jan 2013, 00:35
Rufname:


TreeView ohne ActiveX mit Access Bordmitteln - TreeView ohne ActiveX mit Access Bordmitteln

Nach oben
       Version: (keine Angabe möglich)

Hallo zusammen,

eine TreeView-Control ist schon eine feine Sache, wenn es um eine Struktur wie die einer Dateistruktur auf der Festplatte oder ein Organigramm oder eine Baugruppen-Stückliste geht.

Leider ist die MSCOMCTL ja seit dem Update von MS im Herbst 2012 ein wenig korrumpiert worden durch einen fehlerhaften Patch von MS, den man zwar beheben kann, aber da ist oft Einzelarbeit auf dem Zielrechner nötig.

Darüber hinaus wird an der TreeView oft beklagt, daß sie keine tabellarische Übersicht besitzt und auch die direkte Änderung an einer Tabelle nicht unterstützt.

Dabei hat Access von Haus aus eine durchaus nicht unkomfortable Methode, eine TreeView mit maximal 8 Level aufzubauen, genaugenommen gleich drei: Die Subdatasheets, die man bei Tabellen, Abfragen und Formularen anwenden kann.

Bei Tabellen werden sie automatisch hinzugefügt, sobald eine Relation zu einer anderen Tabelle besteht. Öffnet man eine Tabelle direkt, sieht man dann vorne das [+], mit dem man die verlinkte Tabelle öffnen kann - alles voll bearbeitbar.

Das gleiche funktioniert bei Abfragen ebenso. Hier muß man lediglich im Abfrageeditor nach dem Einfügen der Basistabelle (die aufgeklappt werden soll) und den Spalten, die man sehen möchte, in den grauen Bereich klicken und das Eigenschaftenfenster der Abfrage selbst anzeigen lassen. Hier kann man den Namen des Unterdatenblattes auswählen, was entweder eine Tabelle oder eine andere Abfrage sein kann. Außerdem muß man noch die Link-Kriterien eingeben (allerdings von Hand), genauso, wie man es beim Einfügen eines UFOs in einem Formular macht.

Das Ganze läßt sich bis zu 8 Ebenen schachteln, was für die allermeisten Zwecke ausreichend ist.

In der angehängten Demodatenbank sind drei Tabellen, tblRoot, tblLevel1 und tblLevel2, um zu demonstrieren, wie es funktioniert. Hier wurden absichtlich keine Beziehungen erstellt, damit man sehen kann, daß es in allen Varianten auch ohne Beziehungen zwischen den Tabellen funktioniert, solange es ein Link-Kriterium gibt, das Access zuordnen kann (Indizes auf solche Spalten zu setzen, ist natürlich sinnvoll). Auch bei Tabellen kann man das Eigenschaftenfenster einblenden und ein Unterdatenblatt definieren sowie die Link-Kriterien. Im Beispiel steht die Definition auf "Automatisch", was der Standard ist. Daß Access trotzdem die Links zu den Untertabellen kennt, liegt daran, daß ich zuerst die Beziehungen zwischen den Tabellen im Beziehungseditor erstellt habe und erst am Ende wieder entfernt habe. Access speichert die Beziehung für die Unterdatenblätter also trotzdem weiterhin.

Wie kann man das nun für Formulare nutzen?

Die erste Methode ist, man erstellt ein neues, leeres Formular ohne Datenverbindung und zieht dann einfach aus dem Navigationsfenster die Basistabelle (hier tblRoot) auf das leere Formular. Access erstellt automatisch einen UFO-Container und fügt die Tabelle selbst als Datenquelle ein. Dadurch kann man die gleiche Darstellung im Formular erreichen, als hätte man die Tabelle direkt geöffnet.

Im Regelfall will man aber die Tabellen nicht dem User direkt anzeigen, also wäre die zweite Methode schon sinnvoller. Die drei Queries in der Demodatenbank zeigen einfach nur die jeweilige Tabelle an, mit Unterdatenblatt, wie bei den Tabellen. In der Praxis würde man hier dann die Spaltennamen der Queries mit Aliasen anpassen und nur die anzeigen, die der User sehen soll.
Auch hier kann man einfach die Basisquery (hier "qryRoot") einfach auf ein leeres Formular ziehen, funktioniert genauso wie bei den Tabellen.

Trotzdem ist auch diese Variante immer noch unschön, denn weder Tabellen noch Queries unterstützen Events oder Formatierungen - man kann gerade mal eine Gültigkeitsregel mit einer Meldung festlegen, die Formatierung beschränkt sich auf generelle Datasheet-Formatierungen in den Datenbankoptionen. Events gehen gar nicht, nur die beiden, die der UFO-Container unterstützt, also "Beim Hingehen" und "Beim Verlassen". Das ist dürftig, damit kann man wenig anfangen.

Also auf zur dritten Methode:
Für die dritte Methode muß man einmalig so viele Unterformulare erstellen, wie man an aufklappbaren Leveln plant (auch hier wieder maximal 8).
Die schnellste Methode besteht darin, Access die meiste Arbeit machen zu lassen (das geht allerdings erst ab A2007):
Man fängt beim untersten Level an und öffnet die Abfrage (hier "qryLevel2"), dann einfach unter "Erstellen"-"Weitere Formulare"-"Datenblatt" auswählen und Access erstellt automatisch für jedes Feld, daß in der Query enthalten ist, ein passendes Control und stellt das Formular auf "Datenblatt" ein. Fertig! Jetzt kann man sich noch im Design austoben wie Conditional Formatting, Hintergrundfarbe, alternative Zeilenfarbe (ab A2007), eingeblendete oder ausgeblendete Spalten usw. Außerdem könnte man hier nun beliebigen Eventcode verwenden, wie üblich.

Noch ist es aber keine TreeView, der Trick kommt jetzt.
Als erstes macht man das gleiche mit dem nächsthöheren Level, hier also "qryLevel1", und erstellt genauso ein Formular in Datasheet-Ansicht, formatiert es nach Wunsch usw.
Danach zieht man einfach das eben erstellte Formular in der Entwurfsansicht irgendwo in den Detailbereich. Es kommt nicht darauf an, wie groß es ist, auch die Formatierung der anderen Felder ist in der Entwurfsansicht egal, da am Ende die Datenblattansicht angezeigt wird.
Durch das Einfügen eines Unterformulars mit passendem Link-Kriterium (wie üblich) wird das Formular nun genauso angezeigt wie oben die Tabellen- oder Abfrage-Ansicht. Genau auf die gleiche Weise wird der nächsthöhere Level erstellt, das Ergebnis ist in der Demodatenbank unter "frmTreeForms" zu sehen.

Nun hat man eine (hier dreistufige) TreeView, die sich auf jedem Level aus- und einklappen läßt, die man beliebig formatieren und programmieren kann und das auf jedem Level unabhängig vom nächsten.

Aber die TreeView kann noch mehr: Im Gegensatz zu den beiden Modellen mit Tabellen und Abfragen kann die Darstellung des Formulars geändert werden - zumindest des Formulars auf der untersten Ebene. Hier kann man (im Gegensatz zu den höheren Leveln) die Ansicht auch auf Endlos- oder Einzelformular umstellen, ebenso geht aber auch sogar PivotTable oder PivotChart. A2007 läßt dafür sogar die Einstellung Splitform zu, allerdings wird dann nur der Einzelformular-Teil angezeigt.

Darüber hinaus verwaltet Access für alle Ebenen dieser "TreeView" nur noch einen Datensatznavigator, was auch sehr praktisch ist, denn die Darstellung von x Navigatoren macht die Übersicht für den User nicht gerade einfacher. Lediglich das Hauptformular zeigt nun noch einen Navigator an, der automatisch auf die passenden Werte umgeschaltet wird, wenn man zwischen den Ebenen wechselt. Lediglich, wenn das UFO auf der untersten Ebene kein Datenblatt ist, bekommt dieses einen eigenen Navigator.

Ein weiteres praktisches Highlight dieser Darstellung ist, daß (ab A2007) auch die Filter, die in der Datenblattansicht automatisch in jeder Spalte zur Verfügung stehen, an die einzelnen Bereiche angepaßt werden. Wenn man sich also in der dritten Ebene befindet und einen Filter in einer Spalte definiert, gilt der Filter nicht nur für den gerade aufgeklappten Zweig, sondern für alle Zweige der gleichen Ebene. Damit kann man also auch eine ziemlich komplexe Filterung hinbekommen.

Und natürlich sei nochmal erwähnt, daß man hier die volle Kontrolle über die zur Verfügung stehenden Spalten hat, die der User sehen soll, ebenso darüber, was davon editierbar sein soll und was nicht - auf jeder Ebene unabhängig.

Interessanterweise funktioniert dieses Feature sogar schon mit A2003 ebenso reibungslos, ohne daß es je sehr oft genutzt worden wäre. Ob es schon mit A2000 ging, weiß ich nicht, habe die Demodatenbank auch mal im Format A2000 gespeichert, wenn es jemand testen will.

Will man mehr als 8 Level verwenden, muß man sich behelfen, indem man dann ein Formular baut, daß den Tree von Level 2 bis 9 anzeigt oder nur die weiteren Unterteilungen des aktuell gewählten Zweiges, usw. Das könnte dann allerdings schon etwas aufwendig sein, so einen Tree sinnvoll zu programmieren.

Schade nur, daß MS offenbar doch recht viel Zeit darin investiert hat, eine funktionsfähige tabellarische TreeView in Access zu integrieren, aber leider kein simples TreeView-Control, mit dem man diese Fähigkeit als Control mit ein paar Eigenschaften hätte festlegen können. Wie man aber sieht, wenn man es richtig zusammenbastelt, bekommt man eine lauffähige TreeView - und das OHNE EINE ZEILE CODE!

Viel Spaß beim Experimentieren

Christian



AccessTreeView.zip
 Beschreibung:
Tabellarische TreeView ohne ActiveX mit Access Bordmitteln - enthalten Versionen für A2000 aufwärts

Download
 Dateiname:  AccessTreeView.zip
 Dateigröße:  56 KB
 Heruntergeladen:  563 mal

Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Formulare: Treeview Routine 6 Supermarc1 317 21. Aug 2013, 18:21
Supermarc1 Treeview Routine
Keine neuen Beiträge Access Formulare: Schriftart der Treeview ändern 14 JtGD28 2013 24. Jul 2012, 15:27
Bitsqueezer Schriftart der Treeview ändern
Keine neuen Beiträge Access Formulare: Treeview: Knoten nicht anwählbar einstellen 1 Vandroy 494 18. Sep 2011, 14:45
Nouba Treeview: Knoten nicht anwählbar einstellen
Keine neuen Beiträge Access Formulare: Fehlermeldungen wenn Treeview im Formular 2 JtGD28 277 23. März 2010, 19:52
JtGD28 Fehlermeldungen wenn Treeview im Formular
Keine neuen Beiträge Access Formulare: Anleitung ActiveX-Steuerelement "TreeView" 3 Aquerias 15189 21. März 2010, 14:36
JtGD28 Anleitung ActiveX-Steuerelement "TreeView"
Keine neuen Beiträge Access Formulare: Mozilla ActiveX Controll 1 Reip 1091 06. Aug 2009, 13:51
Reip Mozilla ActiveX Controll
Keine neuen Beiträge Access Programmierung / VBA: grosses Problem mit Treeview 0 beemer 503 12. März 2008, 16:00
beemer grosses Problem mit Treeview
Keine neuen Beiträge Access Programmierung / VBA: Fehl429 Objekterstellung Active-X.. NUR bei Aufruf Outlook 2 sigmar 680 11. Okt 2007, 10:08
sigmar Fehl429 Objekterstellung Active-X.. NUR bei Aufruf Outlook
Keine neuen Beiträge Access Programmierung / VBA: MS Treeview Referenz? 3 OObsi 1300 09. Okt 2007, 11:29
Nouba MS Treeview Referenz?
Keine neuen Beiträge Access Programmierung / VBA: TreeView Objekt an Sub übergeben - Laufzeitfehler 2 thehack 2097 26. Apr 2007, 15:09
SGast TreeView Objekt an Sub übergeben - Laufzeitfehler
Keine neuen Beiträge Access Programmierung / VBA: TreeView und Drag&Drop 2 volta 2414 05. Mai 2006, 11:46
Stelli TreeView und Drag&Drop
Keine neuen Beiträge Access Programmierung / VBA: TreeView 4 Gast 1994 01. März 2006, 23:57
Snow TreeView
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML Forum