{"id":55000771,"date":"2011-04-01T00:00:00","date_gmt":"2020-05-22T22:02:25","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=771"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"TreeViewKonfigurator_erweitert","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/","title":{"rendered":"TreeView-Konfigurator erweitert"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/fb59f9dc8a324c5ebd4f72035ec73af4\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>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&uuml;llen k&ouml;nen. Diese L&ouml;sung haben wir kr&auml;ftig &uuml;berarbeitet: Sie k&ouml;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.<\/b><\/p>\n<p><b>Vorbereitung<\/b><\/p>\n<p>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&uuml;ssen, sondern in einer Bibliotheksdatenbank. Das bedeutet, dass Sie diese Bibliothek in Ihren Verweisen referenzieren m&uuml;ssen. Anschlie&szlig;end reicht es aus, die Bibliotheksdatenbank im gleichen Verzeichnis zu speichern, in dem sich auch die Datenbank mit dem Verweis befindet.<\/p>\n<p>Insgesamt sind folgende Schritte n&ouml;tig:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Setzen Sie einen Verweis auf die Bibliotheksdatenbank <b>TreeViewConfigurator.mde<\/b>. Dies erledigen Sie, indem Sie im <b>Verweise<\/b>-Dialog auf die Schaltfl&auml;che <b>Durchsuchen <\/b>klicken und dort die entsprechende Datei ausw&auml;hlen (s. Bild 1).<\/li>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic013.png\" alt=\"pic013.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 1: Verweis auf die TreeViewConfigurator-Datenbank<\/span><\/b><\/p>\n<li class=\"aufz-hlung\">Importieren Sie die Tabelle <b>tblNodes <\/b>der Bibliotheksdatenbank in die Zieldatenbank und leeren Sie diese gegebenenfalls.<\/li>\n<\/ul>\n<p>Au&szlig;erdem ben&ouml;tigen Sie zwingend einen Verweis auf die Bibliothek <b>Microsoft Office x.0 Object Library<\/b>.<\/p>\n<p><b>Den TreeView-Konfigurator an Bord holen<\/b><\/p>\n<p>Der TreeView-Konfigurator tritt im Wesentlichen durch das Formular <b>frmTreeViewHandler <\/b>in Erscheinung. Dieses Formular erlaubt die vollst&auml;ndige Konfiguration eines oder mehrerer TreeViews. Das Formular steckt allerdings, genau wie die komplette Logik des TreeView-Konfigurators, in der Bibliotheksdatenbank <b>TreeViewConfigurator.mde<\/b>. Diese Datenbank enth&auml;lt eine &ouml;ffentliche Prozedur namens <b>OpenTreeViewConf <\/b>zum Anzeigen des TreeView-Konfigurator-Formulars. Sie k&ouml;nnen diese nun jeweils &uuml;ber das Direktfenster aufrufen, aber es gibt noch eine elegantere L&ouml;sung. Dazu legen Sie einfach ein neues Formular namens <b>frmTreeViewHandler <\/b>in der Zieldatenbank an. F&uuml;gen Sie diesem Formular lediglich eine Ereignisprozedur hinzu, die durch das Ereignis <b>Beim &Ouml;ffnen <\/b>ausgel&ouml;st wird und die wie folgt aussieht:<\/p>\n<pre>Private Sub Form_Open(Cancel As Integer)\r\n    OpenTreeViewConf _\r\n    &quot;{66EAB73D-990B-42DF-B28D-D06FFA989759}&quot;\r\n    Cancel = True\r\n    End Sub<\/pre>\n<p>Diese Prozedur &ouml;ffnet mit <b>OpenTreeViewConf <\/b>das Formular <b>frmTreeViewConf <\/b>in der Bibliotheksdatenbank. Die Angabe der GUID ist n&ouml;tig, damit Sie den TreeView-Konfigurator f&uuml;r verschiedene Anwendungen nutzen k&ouml;nnen.<\/p>\n<p>Der Konfigurator zeigt dann nur die TreeView-Daten an, die zur aktuellen Anwendung geh&ouml;ren. Vergeben Sie daher f&uuml;r jede Anwendung eine neue GUID. Durch das Einstellen des Parameters <b>Cancel <\/b>auf den Wert <b>True <\/b>wird das &Ouml;ffnen des entsprechenden Formulars in der Zieldatenbank abgebrochen. Auf diese Weise &ouml;ffnen Sie das Formular der Bibliotheksdatenbank so, als ob es sich selbst in der Zieldatenbank befinden w&uuml;rde (s. Bild 2).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic019.png\" alt=\"pic019.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 2: Die Benutzeroberfl&auml;che des TreeView-Handlers<\/span><\/b><\/p>\n<p><b>Grundger&uuml;st<\/b><\/p>\n<p>Legen Sie dann ein neues, leeres Formular an und speichern Sie es unter dem gew&uuml;nschten Namen. F&uuml;gen Sie ein <b>TreeView<\/b>-Steuerelement und ein <b>ImageList<\/b>-Steuerelement hinzu und stellen Sie deren Namen auf <b>ctlTreeView <\/b>und <b>ctlImageList <\/b>ein. Ziehen Sie das <b>TreeView<\/b>-Steuerelement auf die gew&uuml;nschte Gr&ouml;&szlig;e. Das <b>ImageList<\/b>-Steuerelement platzieren Sie irgendwo &#8211; es erscheint ohnehin nicht in der Formularansicht.<\/p>\n<p>Dann legen Sie eine Ereignisprozedur f&uuml;r das Ereignis <b>Beim Laden <\/b>des Formulars an. Dieses enth&auml;lt die wesentlichen Schritte zum F&uuml;llen des TreeView-Steuerelements mit den gew&uuml;nschten Daten:<\/p>\n<pre>Private Sub Form_Load()\r\n    Set objTreeViewHandler = _\r\n    New clsTreeViewHandler\r\n    With objTreeViewHandler\r\n    Set .ImageListInst = _\r\n    Me!ctlImageList.Object\r\n    Set .TreeViewInst = Me!ctlTreeView.Object\r\n    .Appearance = ccFlat\r\n    .LineStyle = tvwRootLines\r\n    .Style = tvwTreelinesPlusMinusPictureText\r\n    .Indentation = 5\r\n    .InitTreeView 1\r\n    .FillTree\r\n    End With\r\n    End Sub<\/pre>\n<p>Die hier referenzierte Objektvariable <b>objTreeViewHandler <\/b>deklarieren Sie wie folgt im Kopf des Klassenmoduls:<\/p>\n<pre>Dim WithEvents objTreeViewHandler As\r\nclsTreeViewHandler<\/pre>\n<p>Die Prozedur erzeugt zun&auml;chst eine neue Instanz der Steuerungsklasse f&uuml;r das <b>TreeView<\/b>-Steuerelement. Dann weist sie den Eigenschaften der Steuerungsklasse Verweise auf das f&uuml;r Icons zu verwendende <b>ImageList<\/b>-Steuerelement sowie das <b>TreeView<\/b>-Steuerelement zu. Die weiteren Eigenschaften <b>Appearance<\/b>, <b>LineStyle<\/b>, <b>Style <\/b>und <b>Indentation <\/b>sorgen f&uuml;r die gew&uuml;nschte Optik und entsprechen den gleichnamigen Eigenschaften des <b>TreeView<\/b>-Steuerelements. Interessant und notwendig sind die beiden letzten Anweisungen: <b>InitTreeView <\/b>initialisiert das <b>TreeView<\/b>-Steuerelement und <b>FillTree <\/b>f&uuml;llt es mit den festgelegten Daten.<\/p>\n<p>Speichern Sie dieses Formular nun unter dem Namen <b>frmTreeView_Basis<\/b>. Sie k&ouml;nnen es dann zum Nachvollziehen der folgenden Beispiele jeweils kopieren.<\/p>\n<p>Sie brauchen es dann nur unter einem dem Beispiel entsprechenden Namen zu speichern und in der folgenden Zeile der Prozedur <b>Form_Load<\/b> den Platzhalter <b>&lt;ID&gt; <\/b>durch den im Formular <b>frmTreeViewConf <\/b>angezeigten Wert zu ersetzen:<\/p>\n<pre>.InitTreeView &lt;ID&gt;<\/pre>\n<p>Der Parameter der Methode <b>InitTreeView <\/b>entspricht der ID des im Formular <b>frmTreeViewHandler <\/b>festgelegten Baums. Das bedeutet: Sie k&ouml;nnen mehrere B&auml;ume definieren und diese in verschiedenen Formularen anzeigen.<\/p>\n<p>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.<\/p>\n<p><b>Kunden anzeigen<\/b><\/p>\n<p>&Ouml;ffnen Sie erstmalig das Formular <b>frmTreeViewConf<\/b>. Dieses fragt zun&auml;chst per <b>InputBox<\/b> den Namen des ersten anzulegenden TreeViews ab (s. Bild 3). Geben Sie hier einfach einen Namen ein, anhand dessen Sie das TreeView sp&auml;ter identifizieren k&ouml;nnen &#8211; der Benutzer bekommt diese Bezeichnung nicht zu sehen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic014.png\" alt=\"pic014.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 3: Angabe des TreeView-Namens<\/span><\/b><\/p>\n<p>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:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Tabelle\/Abfrage<\/b>: <b>tblKunden<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Basistabelle<\/b>: <b>tblKunden<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Prim&auml;rschl&uuml;ssel<\/b>: <b>KundeID <\/b>(kann aus dem Kombinationsfeld ausgew&auml;hlt werden)<\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: beliebiger Wert, beispielsweise <b>aa<\/b>. Dieser dient zur eindeutigen Identifikation der TreeView-Elemente.<\/li>\n<li class=\"aufz-hlung\"><b>Elementtext<\/b>: <b>Kunde <\/b>(Feld, dessen Wert im Baum als Text angezeigt werden soll &#8211; ebenfalls per Kombinationsfeld ausw&auml;hlbar)<\/li>\n<\/ul>\n<p>Die Konfiguration ist fertig, nun kopieren Sie das Basisformular <b>frmTreeView_Basis <\/b>nach <b>frmTreeView_NurKunden <\/b>und stellen die ID in der oben angegegebenen Codezeile auf den oben im Formular <b>frmTreeViewConf <\/b>angegebenen Wert f&uuml;r <b>Aktuelle ID: <\/b>ein (in der Beispieldatenbank steht dort der Wert <b>7<\/b>). Wenn Sie nun in die Entwurfsansicht wechseln, sollte der Baum wie in Bild 4 gef&uuml;llt werden.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic001.png\" alt=\"pic001.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 4: Ein TreeView mit Kunden-Elementen, aber ohne Images<\/span><\/b><\/p>\n<p><b>Images hinzuf&uuml;gen<\/b><\/p>\n<p>Jeder Kunde soll durch das gleiche Bild repr&auml;sentiert werden. Sie ben&ouml;tigen dazu Bilddateien in einem g&auml;ngigen Format, wir haben PNGs dazu verwendet. Alle Bilddateien, die im TreeView erscheinen sollen, speichern Sie in der Tabelle <b>tblImages<\/b>. Am einfachsten gelingt dies mit dem Tool <b>Picture2OLE<\/b> (<b>www.acciu.de\/picture2ole<\/b>).<\/p>\n<p>Die in der Tabelle <b>tblImages <\/b>gespeicherten Bilder k&ouml;nnen Sie &uuml;ber eines der beiden Kombinationsfelder der Eigenschaft <b>Icon <\/b>im Formular <b>frmTreeViewConf <\/b>ausw&auml;hlen. Mit dem linken der beiden Kombinationsfelder legen Sie ein Feld der unter <b>Tabelle\/Abfrage <\/b>angegebenen Tabelle oder Abfrage fest, das den Namen einer Bilddatei liefern soll, mit dem rechten ein Standardbild f&uuml;r Elemente dieser Tabelle\/Abfrage.<\/p>\n<p>Die erste Variante erm&ouml;glicht, dass Sie f&uuml;r jeden Datensatz ein individuelles Icon anzeigen k&ouml;nnen. Das bietet sich beispielsweise an, wenn Sie m&auml;nnliche und weibliche Kunden mit unterschiedlichen Symbolen darstellen m&ouml;chten.<\/p>\n<p>Als Erstes testen wir die Variante mit dem fixen Icon f&uuml;r alle Datens&auml;tze der Hierarchie-Ebene des Baums. W&auml;hlen Sie einen Eintrag des rechten Kombinationsfelds der Eigenschaft <b>Icon<\/b> aus. Speichern Sie den Datensatz und &ouml;ffnen Sie erneut das Formular <b>frmTreeView_NurKunden<\/b>. Das Ergebnis sieht schon besser aus (s. Bild 5).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic002.png\" alt=\"pic002.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 5: Kunden mit Icon<\/span><\/b><\/p>\n<p><b>Kunden mit Root-Knoten<\/b><\/p>\n<p>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&ouml;chten, sollten Sie diese jeweils unterhalb eines Hauptknotens organisieren. Dies ist allein deshalb praktisch, weil sich so komplette Elementgruppen ausblenden lassen.<\/p>\n<p>F&uuml;gen wir der TreeView-Konfiguration also nun einen Hauptknoten f&uuml;r die Kunden hinzu (Beispieldatenbank: <b>frmTreeView_KundenMitRoot<\/b>, TreeView-ID <b>9<\/b>). Dazu legen Sie im Formular <b>frmTreeViewConf <\/b>einen neuen Datensatz an, der folgende Eigenschaften enth&auml;lt:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Generische Ebene<\/b>: <b>Wahr<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Tabelle\/Abfrage<\/b>: Hier eine eindeutige Bezeichnung f&uuml;r diese Ebene eingeben, beispielsweise <b>KundenRoot<\/b>.<\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: eindeutiger Wert aus zwei Zeichen, hier <b>ab<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Elementtext<\/b>: anzuzeigender Wert, etwa <b>Kunden<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Icon<\/b>: im zweiten Kombinationsfeld (also als Standardbilddatei) eine Bilddatei angeben, die dieser Knoten anzeigen soll<\/li>\n<\/ul>\n<p>F&uuml;gen Sie eine weitere Tabelle mit der Schaltfl&auml;che <b>Neue Tabelle <\/b>hinzu. Tragen Sie f&uuml;r diese genau die gleichen Daten wie f&uuml;r <b>tblKunden <\/b>im ersten Beispiel ein.<\/p>\n<p>Nun w&uuml;rde das Formular <b>frmTreeView_Kunden <\/b>den Eintrag <b>Kunden <\/b>auf der gleichen Ebene wie die Kundeneintr&auml;ge selbst anzeigen. Damit die Kunden unterhalb dieses Eintrags erscheinen, bearbeiten Sie nun den zuerst angelegten Datensatz im Formular <b>frmTreeViewConf<\/b>. Dort legen Sie f&uuml;r die Eigenschaft <b>&Uuml;bergeordnete Tabelle <\/b>schlicht und einfach den Namen des Wertes von Tabelle\/Abfrage des Eintrags f&uuml;r den Kunden-Basisknoten fest, also <b>KundenRoot<\/b>. Au&szlig;erdem aktivieren Sie die Option <b>Alle anzeigen<\/b>.<\/p>\n<p>Kopieren Sie das Formular <b>frmTreeView_Base <\/b>nach <b>frmTreeView_KundenMitRoot <\/b>und legen Sie in der Ereignisprozedur <b>Beim Laden <\/b>die TreeView-ID aus dem <b>TreeViewConf<\/b>-Formular fest (in der Beispieldatenbank <b>9<\/b>).<\/p>\n<p>Beim &Ouml;ffnen des Formulars <b>frmTreeView_Kunden <\/b>erscheint nun der minimierte Kunden-Knoten, den Sie wie in Bild 6 durch einen Mausklick auf das Plus-Zeichen erweitern k&ouml;nnen.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic003.png\" alt=\"pic003.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 6: Kunden-Hauptknoten mit Untereintr&auml;gen<\/span><\/b><\/p>\n<p>Sie k&ouml;nnen auch festlegen, dass das Kunden-Basiselement direkt beim Anzeigen des Formulars ausgeklappt wird. Dazu aktivieren Sie einfach das Kontrollk&auml;stchen rechts neben der Eigenschaft Expanded-Wert f&uuml;r die Tabelle\/Abfrage <b>KundenRoot <\/b>im Formular <b>frmTreeViewConf<\/b>. Mit dem Kombinationsfeld links daneben k&ouml;nnen Sie wiederum ein Feld ausw&auml;hlen, das den individuellen <b>Expanded<\/b>-Wert f&uuml;r jeden einzelnen Knoten f&uuml;r eine Tabelle\/Abfrage liefert. Sie haben dann die M&ouml;glichkeit, durch entsprechenden Code das Ein-\/Ausklappen-Ereignis des <b>TreeViewHandlers <\/b>abzugreifen und den <b>Expanded<\/b>-Wert in der jeweiligen Tabelle zu speichern.<\/p>\n<p><b>Eine weitere Ebene: Projekte<\/b><\/p>\n<p>Nun soll das TreeView-Steuerelement Eintr&auml;ge aus einer per 1:n-Beziehung verkn&uuml;pften Tabelle anzeigen, in diesem Fall <b>tblProjekte<\/b> (mit den Feldern <b>ProjektID<\/b>, <b>Projektbezeichnung <\/b>und <b>KundeID<\/b>). Die Datens&auml;tze dieser Tabelle werden &uuml;ber das Fremdschl&uuml;sselfeld <b>KundeID <\/b>mit den Datens&auml;tzen der Kundentabelle verkn&uuml;pft.<\/p>\n<p>Damit diese Datens&auml;tze im TreeView-Steuerelement unterhalb der Kunden-Datens&auml;tze angezeigt werden, erstellen Sie im <b>TreeViewConf<\/b>-Formular ein neues TreeView. In einer zus&auml;tzlich zu den bestehenden Tabellen-Ebenen angelegten Ebene im TreeView-Konfigurator legen Sie die folgenden Eigenschaften fest (in der Beispieldatenbank im Formular <b>frmTreeView_KundenMitProjekten <\/b>beziehungsweise TreeView-ID <b>10 <\/b>zu finden):<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Tabelle\/Abfrage<\/b>: <b>tblProjekte<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Basistabelle<\/b>: <b>tblProjekte<\/b><\/li>\n<li class=\"aufz-hlung\"><b>&Uuml;bergeordnete Tabelle<\/b>: <b>tblKunden<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Prim&auml;rschl&uuml;ssel<\/b>: <b>ProjektID<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Fremdschl&uuml;ssel<\/b>: <b>KundeID<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: <b>ac<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Elementtext<\/b>: <b>Projektbezeichnung<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Icon<\/b>: <b>box.png <\/b>als <b>Standardwert<\/b><\/li>\n<\/ul>\n<p>Dadurch, dass Sie der Eigenschaft <b>&Uuml;bergeordnete Tabelle <\/b>den Wert <b>tblKunden <\/b>und der Eigenschaft <b>Fremdschl&uuml;ssel <\/b>den Wert <b>KundeID <\/b>zuweisen, erkennt der TreeView-Konfigurator automatisch, dass das TreeView-Steuerelement unterhalb eines Elements aus der Tabelle <b>tblKunden <\/b>alle Elemente der Tabelle <b>tblProjekte <\/b>anzeigen soll, deren Fremdschl&uuml;sselfeld <b>KundeID <\/b>dem gleichnamigen Prim&auml;rschl&uuml;sselfeld der &uuml;bergeordneten Tabelle entspricht. Das Ergebnis sieht schlie&szlig;lich wie in Bild 7 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic004.png\" alt=\"pic004.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 7: Tabellen einer 1:n-Beziehung im TreeView<\/span><\/b><\/p>\n<p><b>Zwischenelement f&uuml;r Projekte<\/b><\/p>\n<p>Nun kann es auch beim Kunden-Element vorkommen, dass Sie diesem nicht nur die Projekte des Kunden, sondern beispielsweise auch seine Ansprechpartner unterordnen m&ouml;chten. &auml;hnlich wie beim Root-Element f&uuml;r die Kunden w&auml;re auch hier ein Zwischenelement wie <b>Projekte <\/b>(beziehungsweise <b>Ansprechpartner<\/b>) sinnvoll. Dieses legen Sie in einer neuen Ebene an, die folgende Eigenschaften erh&auml;lt (siehe Formular <b>frmTreeView_KundenMitProjektenRoot<\/b>, TreeView-ID <b>11<\/b>):<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Generische Ebene<\/b>: <b>Wahr<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Tabelle\/Abfrage<\/b>: <b>ProjekteRoot<\/b><\/li>\n<li class=\"aufz-hlung\"><b>&Uuml;bergeordnete Tabelle<\/b>: <b>tblKunden<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Alle anzeigen<\/b>: <b>Wahr<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: <b>ad<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Elementtext<\/b>: <b>Projekte<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Icon<\/b>: <b>box.png<\/b><\/li>\n<\/ul>\n<p><!--30percent--><\/p>\n<p>Au&szlig;erdem m&uuml;ssen Sie wieder, wie schon bei den Kunden und dem Kunden-Root-Element, den Eintrag f&uuml;r die Tabelle <b>tblProjekte <\/b>anpassen. Dort w&auml;hlen Sie unter <b>&Uuml;bergeordnete Tabelle <\/b>den Eintrag <b>KundenRoot <\/b>aus.<\/p>\n<p>Zwischen Kunden und Projekte schiebt sich nun noch jeweils ein <b>Projekte<\/b>-Element (s. Bild 8).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic005.png\" alt=\"pic005.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 8: Projekte mit Rootknoten<\/span><\/b><\/p>\n<p><b>Daten aus m:n-Beziehungen<\/b><\/p>\n<p>Wenn Sie den jeweiligen Projekten noch die Mitarbeiter zuordnen m&ouml;chten, die sich mit einem Projekt besch&auml;ftigen, ben&ouml;tigen Sie eine m:n-Beziehung zwischen der Tabelle <b>tblProjekte <\/b>und einer weiteren Tabelle namens <b>tblMitarbeiter <\/b>mit den beiden Feldern <b>MitarbeiterID <\/b>und <b>Mitarbeiter <\/b>(dieses enth&auml;lt den kompletten Namen des Mitarbeiters in der Form <b>&lt;Nachname&gt;, &lt;Vorname&gt;<\/b>). Die Verkn&uuml;pfungstabelle hei&szlig;t <b>tblMitarbeiterProjekte <\/b>und enth&auml;lt neben dem Prim&auml;rschl&uuml;sselfeld <b>MitarbeiterProjektID <\/b>zwei Fremdschl&uuml;sselfelder namens <b>MitarbeiterID <\/b>und <b>ProjektID<\/b>.<\/p>\n<p>Um nun unter jedem Projekt die richtigen Mitarbeiter anzuzeigen, ben&ouml;tigen Sie eine Abfrage, welche die ben&ouml;tigten Felder aus den beiden Tabellen <b>tblMitarbeiterProjekte <\/b>und <b>tblMitarbeiter <\/b>zusammenf&uuml;hrt (s. Bild 9).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic006.png\" alt=\"pic006.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 9: Zuordnung von Mitarbeitern zu Projekten<\/span><\/b><\/p>\n<p>Sie ben&ouml;tigen folgende Felder aus den beiden Tabellen: Aus der Tabelle <b>tblMitarbeiterProjekte <\/b>ben&ouml;tigen Sie das Feld <b>ProjektID<\/b>, um die Mitarbeiter-Elemente dem jeweiligen Projekt-Element zuordnen zu k&ouml;nnen. Au&szlig;erdem ben&ouml;tigen Sie das Prim&auml;rschl&uuml;sselfeld der Verkn&uuml;pfungstabelle, <b>MitarbeiterProjektID<\/b>. Wenn &uuml;ber das TreeView-Steuerelement ein Mitarbeiter von einem Projekt abgezogen werden soll, darf schlie&szlig;lich nicht der Mitarbeiter gel&ouml;scht werden, sondern nur der Datensatz der Tabelle <b>tblMitarbeiterProjekte<\/b>, der den Mitarbeiter mit dem Projekt verkn&uuml;pft. Au&szlig;erdem ben&ouml;tigen Sie aus der Tabelle <b>tblMitarbeiter <\/b>die Bezeichnung des jeweiligen Mitarbeiters und, egal aus welcher Tabelle, das Feld <b>MitarbeiterID<\/b>. Dar&uuml;ber k&ouml;nnen Sie bei einem Klick auf einen Mitarbeiter-Knoten gegebenenfalls Details zu diesem Mitarbeiter anzeigen.<\/p>\n<p>F&uuml;r dieses Beispiel verwenden wir in der Beispieldatenbank das Formular <b>frmTreeView_ProjekteKundenMitarbeiter<\/b> sowie die TreeView-ID <b>11<\/b>.<\/p>\n<p>Bei der Zuweisung der Werte f&uuml;r die Eigenschaften ergeben sich einige Neuerungen gegen&uuml;ber den vorherigen Beispielen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Tabelle\/Abfrage<\/b>: <b>qryMitarbeiterProjekte<\/b>, als die Abfrage, die alle ben&ouml;tigten Werte liefert.<\/li>\n<li class=\"aufz-hlung\"><b>Basistabelle<\/b>: Abweichend von <b>Tabelle\/Abfrage <\/b>landet hier die Tabelle <b>tblMitarbeiterProjekte<\/b>. Faustregel: Diese Eigenschaft erwartet die Tabelle, aus der gegebenenfalls Datens&auml;tze gel&ouml;scht werden, um ein Element aus dem TreeView zu entfernen &#8211; hier also die Verkn&uuml;pfungstabelle.<\/li>\n<li class=\"aufz-hlung\"><b>&Uuml;bergeordnete Tabelle<\/b>: <b>tblProjekte<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Prim&auml;rschl&uuml;ssel<\/b>: <b>MitarbeiterID <\/b>(also das Feld, &uuml;ber das Sie Detaildaten in weiteren Formularen anzeigen k&ouml;nnen)<\/li>\n<li class=\"aufz-hlung\"><b>Fremdschl&uuml;ssel<\/b>: <b>ProjektID<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Prim&auml;rschl&uuml;sselfeld der Basistabelle<\/b>: <b>MitarbeiterProjektID<\/b>, als der Prim&auml;rschl&uuml;ssel aus der Tabelle, aus der gegebenenfalls Werte gel&ouml;scht werden sollen.<\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: <b>ae<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Elementtext<\/b>: <b>Mitarbeiter<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Icon<\/b>: <b>user.png<\/b><\/li>\n<li class=\"aufz-hlung\"><b>m:n-Beziehung<\/b>: Aktivieren<\/li>\n<\/ul>\n<p>Das Ergebnis finden Sie in Bild 10.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic007.png\" alt=\"pic007.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 10: Kunden, Projekte und per m:n-Beziehung verkn&uuml;pfte Mitarbeiter<\/span><\/b><\/p>\n<p><b>Reflexive Beziehungen<\/b><\/p>\n<p>Auch vor Daten aus reflexiven Beziehungen, also solchen, bei denen die Datens&auml;tze einer Tabelle mit einem oder mehreren anderen Datens&auml;tzen der gleichen Tabelle verkn&uuml;pft werden, macht der TreeView-Konfigurator nicht Halt.<\/p>\n<p>Als Test h&auml;ngen wir an unser Beispiel die Hierarchie der Mitarbeiter an. Diese k&ouml;nnte man &uuml;ber ein zus&auml;tzliches Fremdschl&uuml;sselfeld in der Tabelle <b>tblMitarbeiter <\/b>realisieren, aber g&uuml;nstiger ist es, eine m:n-Beziehung zwischen den Prim&auml;rschl&uuml;sselfeldern zweier in Beziehung stehender Mitarbeiter herzustellen.<\/p>\n<p>Die m:n-Beziehung hei&szlig;t <b>tblVorgesetzteMitarbeiter<\/b> und enth&auml;lt zwei Fremdschl&uuml;sselfelder namens <b>VorgesetzterID <\/b>und <b>UntergebenerID<\/b>, die beide mit dem Feld <b>MitarbeiterID <\/b>der Tabelle <b>tblMitarbeiter <\/b>verkn&uuml;pft sind (s. Bild 11).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic008.png\" alt=\"pic008.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 11: Reflexive Beziehung zwischen Vorgesetzten und Untergebenen<\/span><\/b><\/p>\n<p>Wie k&ouml;nnen wir diese reflexive Beziehung nun mithilfe des TreeView-Konfigurators darstellen<\/p>\n<p>Als Erstes f&uuml;gen Sie dem Baum einen weiteren Root-Knoten namens <b>MitarbeiterRoot <\/b>und mit dem Text <b>Mitarbeiter <\/b>hinzu, der auf der gleichen Ebene wie der Root-Knoten <b>Kunden <\/b>liegt.<\/p>\n<p>In der Beispieldatenbank finden Sie das Formular unter dem Namen <b>frmTreeView_VorgesetzteUntergebene<\/b>, die TreeView-ID lautet <b>12<\/b>.<\/p>\n<p>Das Mitarbeiter-Root-Element hat folgende Eigenschaften:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Generische Ebene<\/b>: <b>Wahr<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Tabelle\/Abfrage<\/b>: <b>MitarbeiterRoot<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: <b>af<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Elementtext<\/b>: <b>Mitarbeiter <\/b>(als Standardwert)<\/li>\n<li class=\"aufz-hlung\"><b>Icon<\/b>: <b>users.png <\/b>(als Standardwert)<\/li>\n<\/ul>\n<p><b>Reihenfolge hinzuf&uuml;gen<\/b><\/p>\n<p>Das TreeView-Steuerelement zeigt nun zwei Root-Elemente an, <b>Kunden <\/b>und <b>Mitarbeiter<\/b>. Wenn Sie die Reihenfolge fest vorgeben wollen, weisen Sie der Eigenschaft <b>Reihenfolge <\/b>beider Root-Elemente im TreeView-Konfigurator entsprechende Zahlenwerte zu, beispielsweise <b>1 <\/b>und <b>2<\/b>.<\/p>\n<p><b>Darstellung reflexiver Elemente<\/b><\/p>\n<p>F&uuml;r die Darstellung reflexiver Elemente brauchen wir insgesamt drei Eintr&auml;ge im TreeView-Konfigurator: Einer soll alle Mitarbeiter liefern, die keinen Vorgesetzten haben.<\/p>\n<p>Diese sind selbst Vorgesetzte und landen dementsprechend direkt in der ersten Ebene unterhalb des generischen <b>Mitarbeiter<\/b>-Elements.<\/p>\n<p>Der zweite Eintrag im TreeView-Konfigurator bildet die erste Ebene der reflexiven Beziehung unterhalb der obersten Ebene ab. Die dritte bedient schlie&szlig;lich alle weiteren Ebenen.<\/p>\n<p>Erstellen Sie zun&auml;chst eine Abfrage f&uuml;r die oberste Ebene. Diese sieht wie in Bild 12 aus. Sie enth&auml;lt die Tabellen <b>tblMitarbeiter <\/b>und <b>tblVorgesetzteUntergebene<\/b>.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic010.png\" alt=\"pic010.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 13: TreeView-Steuerelement mit einem Vorgesetzten<\/span><\/b><\/p>\n<p>Damit diese nur Vorgesetzte anzeigt, also Mitarbeiter, die in der Tabelle <b>tblVorgesetzteMitarbeiter<\/b> nirgends als Untergebener aufgef&uuml;hrt werden, nehmen Sie zwei Einstellungen vor:<\/p>\n<p>Die Beziehung soll alle Datens&auml;tze der Tabelle <b>tblMitarbeiter <\/b>anzeigen und nur diejenigen Daten der Tabelle <b>tblVorgesetzteUntergebene<\/b>, f&uuml;r die auch ein Datensatz vorliegt (Doppelklick auf den Beziehungspfeil, dann in den Verkn&uuml;pfungseigenschaften die entsprechende Option ausw&auml;hlen). Dies zeigt zun&auml;chst alle Mitarbeiter an.<\/p>\n<p>F&uuml;r die Mitarbeiter, die keinen Vorgesetzten haben, liefert das Feld <b>VorgesetzterUntergebenerID <\/b>folglich keinen Wert. Und damit die Abfrage genau diese Eintr&auml;ge zur&uuml;ckliefert, stellen Sie als Kriterium f&uuml;r das Feld <b>VorgesetzterUntergebenerID <\/b>den Wert <b>Ist Null <\/b>ein.<\/p>\n<p>Anschlie&szlig;end f&uuml;gen Sie einen neuen Eintrag im TreeView-Konfigurator mit den folgenden Eigenschaften hinzu:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Tabelle\/Abfrage<\/b>: <b>qryVorgesetzte<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Basistabelle<\/b>: <b>tblMitarbeiter<\/b><\/li>\n<li class=\"aufz-hlung\"><b>&Uuml;bergeordnete Tabelle<\/b>: <b>MitarbeiterRoot<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Prim&auml;rschl&uuml;ssel<\/b>: <b>MitarbeiterID<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Alle anzeigen<\/b>: <b>Wahr<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: <b>ag<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Elementtext<\/b>: <b>Mitarbeiter<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Icon<\/b>: <b>businessman2.png <\/b>(als Standardwert)<\/li>\n<\/ul>\n<p>Der Baum sieht nun wie in Bild 13 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic009.png\" alt=\"pic009.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 12: Diese Abfrage liefert nur Vorgesetzte.<\/span><\/b><\/p>\n<p><b>Untergebene hinzuf&uuml;gen<\/b><\/p>\n<p>Kommen wir nun zu den unteren Ebenen der Hierarchie, die Sie, wie oben beschrieben, &uuml;ber zwei Eintr&auml;ge im TreeView-Konfigurator realisieren. Beide verwenden die gleiche Abfrage als <b>Tabelle\/Abfrage<\/b>. Diese hei&szlig;t <b>qryVorgesetzteUntergebene<\/b> und sieht wie in Bild 14 aus.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic011.png\" alt=\"pic011.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 14: Datenherkunft f&uuml;r die Ermittlung der Mitarbeiter-Hierarchie<\/span><\/b><\/p>\n<p>F&uuml;r die erste Ebene der Untergebenen stellen Sie die Eigenschaften im TreeView-Konfigurator wie folgt ein:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Tabelle\/Abfrage<\/b>: <b>qryVorgesetzteUntergebene<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Basistabelle<\/b>: <b>tblVorgesetzteUntergebene<\/b><\/li>\n<li class=\"aufz-hlung\"><b>&Uuml;bergeordnete Tabelle<\/b>: <b>qryVorgesetzte<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Prim&auml;rschl&uuml;ssel<\/b>: <b>MitarbeiterID<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Fremdschl&uuml;ssel<\/b>: <b>VorgesetzterID<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: <b>ah<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Elementtext<\/b>: <b>Mitarbeiter<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Icon<\/b>: <b>user.png <\/b>(als Standardwert)<\/li>\n<\/ul>\n<p>Die zweite Ebene sieht bis auf die folgenden Elemente genau so aus:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>&Uuml;bergeordnete Tabelle<\/b>: <b>qryVorgesetzteUntergebene<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: <b>ai<\/b><\/li>\n<\/ul>\n<p>Das bedeutet, dass diese Ebene <b>qryVorgesetzteUntergebene <\/b>sowohl als <b>Tabelle\/Abfrage <\/b>als auch als <b>&Uuml;bergeordnete Tabelle <\/b>verwendet und somit einen rekursiven Aufbau des Baums wie in Bild 15 bewirkt.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic012.png\" alt=\"pic012.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 15: Komplette Mitarbeiter-Hierarchie<\/span><\/b><\/p>\n<p><b>Drag and Drop<\/b><\/p>\n<p>Mit dem TreeView-Konfigurator k&ouml;nnen Sie festlegen, wie die im TreeView-Steuerelement angezeigten Daten auf Drag and Drop reagieren sollen. Grunds&auml;tzlich ist Drag and Drop deaktiviert. Es l&auml;sst sich aber in zwei Stufen f&uuml;r jede Ebene aktivieren, was bedeutet, dass der TreeView-Handler &uuml;berhaupt reagiert, wenn der Benutzer versucht, einen Eintrag per Drag and Drop zu bewegen.<\/p>\n<p>Die erste Stufe bezieht sich auf das normale Drag and Drop, das ein Verschieben des Elements bewirkt &#8211; also genau so, wie Sie es vom Windows Explorer her kennen, wenn Sie Dateien oder Verzeichnisse von einem zum anderen Verzeichnis verschieben. Die zweite Variante erfordert das gleichzeitige Dr&uuml;cken der <b>Strg<\/b>-Taste und kopiert den gezogenen Eintrag, sodass das Original am Ausgangsort verbleibt und unter dem Zielelement eine Kopie angelegt wird.<\/p>\n<p>Beides macht nat&uuml;rlich nur unter bestimmten Umt&auml;nden Sinn. Im Falle des Formulars <b>frmTreeView_KundenMitProjekten<\/b> k&ouml;nnen Sie beispielsweise ein Projekt von einem Kunden zum n&auml;chsten ziehen oder bei gedr&uuml;ckter <b>Strg<\/b>-Taste eine Kopie des Projekt-Datensatzes f&uuml;r einen weiteren Kunden anlegen. <\/p>\n<p>Wenn Sie nur das Verschieben erm&ouml;glichen wollen, aktivieren Sie f&uuml;r den Eintrag <b>tblProjekte <\/b>im TreeView-Konfigurator die Option <b>Verschieben per Drag and Drop<\/b>.<\/p>\n<p>Anschlie&szlig;end k&ouml;nnen Sie einen Projekt-Eintrag von einem Kunden-Element auf ein anderes Kunden-Element ziehen. Das Zielelement wird farbig markiert, damit Sie erkennen, dass Sie das gezogene Element darauf fallen lassen k&ouml;nnen. Dadurch geschehen gleich drei Dinge:<\/p>\n<ul>\n<li class=\"aufz-hlung\">In der zugrunde liegenden Tabelle <b>tblProjekte <\/b>wird der Wert des Fremdschl&uuml;sselfeldes <b>KundeID <\/b>f&uuml;r den verschobenen Datensatz auf den neuen Kunden eingestellt.<\/li>\n<li class=\"aufz-hlung\">Das neue &uuml;bergeordnete Element wird neu gef&uuml;llt.<\/li>\n<li class=\"aufz-hlung\">Das verschobene Element wird von seinem vorherigen Standort gel&ouml;scht.<\/li>\n<\/ul>\n<p><b>Drag and Drop auf generische Elemente<\/b><\/p>\n<p>F&uuml;r das Drag and Drop von Elementen auf direkte &uuml;bergeordnete Elemente geschieht also nach der Anpassung einer einzigen Eigenschaft automatisch alles Notwendige.<\/p>\n<p>Etwas mehr Aufwand ist n&ouml;tig, wenn Sie generische Elemente verwenden, um Unterelemente eines Elements zusammenzufassen (wie das Element <b>Projekte <\/b>im Beispielformular <b>frm_TreeView_KundenMitProjektenRoot<\/b>).<\/p>\n<p>Hier legen Sie einen weiteren Eintrag im TreeView-Konfigurator an, der dem TreeView-Handler mitteilt, dass das Projekt-Element nicht auf das generische Projekte-Element, sondern auch auf das dar&uuml;ber liegende Kunden-Element gezogen werden kann. Die Eigenschaften dieses Eintrags f&uuml;llen Sie wie folgt:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Tabelle\/Abfrage<\/b>: <b>tblProjekte<\/b><\/li>\n<li class=\"aufz-hlung\"><b>&Uuml;bergeordnete Tabelle<\/b>: <b>tblKunden<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Prim&auml;rschl&uuml;ssel<\/b>: <b>ProjektID<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Fremdschl&uuml;ssel<\/b>: <b>KundeID<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Schl&uuml;ssel<\/b>: <b>ae<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Elementtext<\/b>: <b>Projektbezeichnung<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Eintrag nur f&uuml;r Drag and Drop<\/b>: <b>Wahr<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Verschieben per Drag and Drop<\/b>: <b>Wahr<\/b><\/li>\n<\/ul>\n<p>Somit verwenden Sie erstmals die Option <b>Eintrag nur f&uuml;r Drag and Drop<\/b>. Das bedeutet, dass dieser Eintrag nicht die Anzeige beeinflusst, sondern nur eine M&ouml;glichkeit hinzuf&uuml;gt, um ein Element von A nach B zu ziehen.<\/p>\n<p>In diesem Fall k&ouml;nnen Sie ein Element nicht nur auf den <b>Projekte<\/b>-Knoten, sondern auch auf den dar&uuml;berliegenden <b>Kunden<\/b>-Knoten ziehen.<\/p>\n<p class=\"zwischen-berschrift-oberer-spaltenrand\">Kopieren per Drag and Drop<\/p>\n<p>Neben dem Verschieben erlaubt der TreeView-Konfigurator auch das Kopieren von Elementen per Drag and Drop &#8211; auch wenn dies leicht eingeschr&auml;nkt geschieht.<\/p>\n<p>Zun&auml;chst zur Aktivierung des Kopierens per Drag and Drop: Dazu setzen Sie einfach einen Haken f&uuml;r die Eigenschaft <b>Kopieren per Drag and Drop <\/b>f&uuml;r den entsprechenden Eintrag im TreeView-Konfigurator.<\/p>\n<p>Beim Kopieren eines Elements geschehen die folgenden beiden Schritte:<\/p>\n<ul>\n<li class=\"aufz-hlung\">Der hinter dem kopierten Element stehende Datensatz wird Feld f&uuml;r Feld kopiert, wobei das Fremdschl&uuml;sselfeld des neuen Datensatzes auf den neuen &uuml;bergeordneten Datensatz eingestellt wird.<\/li>\n<li class=\"aufz-hlung\">Das Zielelement wird neu gef&uuml;llt, damit das kopierte Element sichtbar wird.<\/li>\n<\/ul>\n<p>Sie k&ouml;nnen dies am Beispiel des Formulars <b>frmTreeView_KundenMitProjekten <\/b>nachvollziehen. Ziehen Sie dort bei gedr&uuml;ckter <b>Strg<\/b>-Taste Projekte von einem Kunden zum anderen und beobachten Sie, wie die Datens&auml;tze kopiert werden.<\/p>\n<p><b>Wann funktioniert Drag and Drop<\/b><\/p>\n<p>Die erste Bedingung haben Sie schon kennengelernt: Sie m&uuml;ssen die Option <b>Kopieren per Drag and Drop <\/b>und\/oder <b>Verschieben per Drag and Drop <\/b>f&uuml;r den Eintrag der zu kopierenden\/verschiebenden Elemente im TreeView-Konfigurator aktivieren.<\/p>\n<p>Nat&uuml;rlich k&ouml;nnen Sie nicht jedes Element &uuml;berall hinziehen. Es macht zum Beispiel keinen Sinn, einen Mitarbeiter auf einen Kunden zu ziehen, weil die Datenbank &uuml;berhaupt keine Beziehung zwischen diesen beiden Beziehungen vorsieht.<\/p>\n<p>Deshalb lautet die weitere Bedingung: Wenn Sie ein Element auf ein anderes Element ziehen m&ouml;chten, dann muss f&uuml;r die Tabelle\/Abfrage dieses Elements die Tabelle\/Abfrage des Zielelements im TreeView-Konfigurator als &uuml;bergeordnete Tabelle definiert sein. Dies ist in der Beispieldatenbank etwa bei den Projekten und Kunden der Fall: Der Eintrag der Tabelle <b>tblProjekte <\/b>enth&auml;lt f&uuml;r die Eigenschaft <b>&Uuml;bergeordnete Tabelle <\/b>den Wert <b>tblKunden<\/b>. Daher wird der TreeView-Handler beim Ziehen eines Projekts auf einen Kunden versuchen, das Projekt zum neuen Kunden zu verschieben beziehungsweise zu kopieren. Bei diesem Vorgang erfolgen noch weitere Pr&uuml;fungen, beispielsweise ob der Zielkunde mit dem aktuell &uuml;bergeordneten Kunden &uuml;bereinstimmt &#8211; in diesem Fall ist der Kunde kein g&uuml;ltiges Drop-Ziel.<\/p>\n<p>Es gibt noch einen Spezialfall, der durch den TreeView-Konfigurator abgedeckt wird. Wenn Sie beispielsweise einen Mitarbeiter aus dem unteren Teil (Mitarbeiter-Hierarchie) in den oberen Teil mit den Projekten ziehen und diesen so einem Projekt zuweisen m&ouml;chten, m&uuml;ssen Sie dies gesondert deklarieren. Dazu nehmen Sie die folgenden Einstellungen vor:<\/p>\n<p><b>Tabelle\/Abfrage<\/b>: <b>qryMitarbeiterProjekte<\/b><\/p>\n<p><b>Basistabelle<\/b>: <b>tblMitarbeiterProjekte<\/b><\/p>\n<p><b>Drop auch von<\/b>: <b>qryVorgesetzteUntergebene<\/b><\/p>\n<p><b>&Uuml;bergeordnete Tabelle<\/b>: <b>tblProjekte<\/b><\/p>\n<p><b>Prim&auml;rschl&uuml;ssel<\/b>: <b>MitarbeiterID<\/b><\/p>\n<p><b>Fremdschl&uuml;ssel<\/b>: <b>ProjektID<\/b><\/p>\n<p><b>Schl&uuml;ssel<\/b>: <b>aj<\/b><\/p>\n<p><b>Elementtext<\/b>: <b>Mitarbeiter<\/b><\/p>\n<p><b>Eintrag nur f&uuml;r Drag and Drop<\/b>: aktivieren<\/p>\n<p><b>Verschieben per Drag and Drop<\/b>: deaktivieren<\/p>\n<p><b>Kopieren per Drag and Drop<\/b>: aktivieren<\/p>\n<p><b>m:n-Beziehung<\/b>: aktivieren<\/p>\n<p>Damit sagen Sie dem TreeView-Konfigurator, dass er eine Ebene nur f&uuml;r Drag-and-Drop-Funktionalit&auml;t abbilden, aber diese nicht gesondert anzeigen soll (hierf&uuml;r ist die Eigenschaft <b>Eintrag nur f&uuml;r Drag and Drop <\/b>wichtig). Die Quelle muss dann unter <b>Drop auch von <\/b>angegeben werden. Wichtig ist hier auch, dass Sie die Option <b>Verschieben per Drag and Drop <\/b>deaktivieren, denn die Mitarbeiter sollen ja nach dem Zuordnen zu einem Projekt nicht aus der Hierarchie gel&ouml;scht werden. Bild 16 zeigt, wie das im Beispielformular aussieht.<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic015.png\" alt=\"pic015.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 16: Das Kopieren ist auch zwischen verschiedenen Ebenen m&ouml;glich.<\/span><\/b><\/p>\n<p><b>Im Hintergrund<\/b><\/p>\n<p>Wenn Sie den TreeView-Konfigurator richtig konfigurieren, werden alle Operationen wie Verschieben oder Kopieren auch direkt in den zugrunde liegenden Tabellen festgehalten.<\/p>\n<p><b>Zwischenfazit<\/b><\/p>\n<p>Wie Sie sehen, nimmt der TreeView-Handler Ihnen die komplette Arbeit ab, was das F&uuml;llen des TreeView-Steuerelements mit den Daten der Tabellen Ihrer Datenbank angeht. Dar&uuml;ber hinaus k&ouml;nnen Sie mit wenigen Mausklicks einfache Drag-and-Drop-Funktionen sowohl zum Verschieben als auch zum Kopieren von Elementen aktivieren. Der Clou dabei ist: Sie brauchten bisher bis auf die wenigen Zeilen in der Ereignisprozedur <b>Form_Load <\/b>noch keine einzige Zeile VBA-Code zu produzieren!<\/p>\n<p><b>Kontextmen&uuml;eintr&auml;ge einrichten<\/b><\/p>\n<p>Um das TreeView-Steuerelement und den Zugriff auf seine Elemente m&ouml;glichst effizient zu gestalten, erm&ouml;glicht der TreeView-Konfigurator das Hinzuf&uuml;gen beliebiger Kontextmen&uuml;eintr&auml;ge f&uuml;r einzelnen Elemente. Dies erledigen Sie &uuml;ber das Unterformular im unteren Bereich des TreeView-Konfigurators. W&auml;hlen Sie zun&auml;chst den Eintrag aus, f&uuml;r den Sie einen TreeView-Eintrag anlegen m&ouml;chten.<\/p>\n<p>Im ersten Beispiel wollen wir dem obersten Eintrag des Formulars <b>frmTreeView_VorgesetzteUntergebene <\/b>einen Kontextmen&uuml;eintrag zum Anlegen eines neuen Kunden spendieren. Aktivieren Sie also im TreeView-Konfigurator den Eintrag, der diesem Element entspricht (in der Beispieldatenbank ist das der Eintrag mit der ID <b>67<\/b>).<\/p>\n<p>Geben Sie dann in den ersten Datensatz des Unterformulars die folgenden Werte ein:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>Beschriftung<\/b>: <b>Neuer Kunde<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Parameter<\/b>: <b>NeuerKunde<\/b><\/li>\n<li class=\"aufz-hlung\"><b>Icon<\/b>: <b>businessman2_add.png<\/b><\/li>\n<\/ul>\n<p>Wenn Sie nun das Formular in der Formularansicht &ouml;ffnen und mit der rechten Maustaste auf den obersten Eintrag klicken, erscheint der gew&uuml;nschte Kontextmen&uuml;eintrag wie in Bild 17 (den Kontextmen&uuml;eintrag k&ouml;nnen Sie allerdings auch bei ge&ouml;ffnetem Formular bearbeiten).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic016.png\" alt=\"pic016.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 17: Ein erster Kontextmen&uuml;eintrag<\/span><\/b><\/p>\n<p>Wenn Sie diesen ausw&auml;hlen, geschieht allerdings noch nichts. Nun ist es so weit, selbst ein paar Zeilen Code hinzuzuf&uuml;gen. &Ouml;ffnen Sie den VBA-Editor und dort das Klassenmodul des Formulars <b>frmTreeView_VorgesetzteUntergebene<\/b>.<\/p>\n<p>Im Codefenster w&auml;hlen Sie links das Objekt <b>objTreeViewHandler <\/b>aus. Rechts finden Sie dann alle verf&uuml;gbaren Ereignisse vor. In diesem Fall brauchen wir das Ereignis <b>ShortCutMenuClick<\/b> (s. Bild 18).<\/p>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic017.png\" alt=\"pic017.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 18: Anlegen einer Ereignisprozedur, die beim Klick auf einen Kontextmen&uuml;eintrag ausgel&ouml;st wird<\/span><\/b><\/p>\n<p>Die Ereignisprozedur liefert eine ganze Reihe Informationen. F&uuml;r unseren Zweck ist zun&auml;chst der Wert von <b>strParameter <\/b>interessant: Damit erkennen Sie den Kontextmen&uuml;eintrag n&auml;mlich als den wieder, f&uuml;r den wir soeben als Parameter den Wert <b>NeuerKunde <\/b>eingetragen haben. Diesen Parameter wertet eine <b>Select Case<\/b>-Konstruktion aus und verweist im bisher einzigen Fall auf einige weitere Anweisungen. Diese fragen den Namen des neuen Kunden ab und schreiben einen entsprechenden Datensatz in die Tabelle <b>tblKunden<\/b>.<\/p>\n<p>Au&szlig;erdem f&uuml;llt die Prozedur mit der Methode <b>FillNode <\/b>das &uuml;bergeordnete Element. Einen Verweis auf dieses Element erhalten wir &uuml;ber den Parameter <b>objNode <\/b>&#8211; dies ist das Element, dessen Kontextmen&uuml;eintrag angezeigt wurde (s. <span class=\"verweis-ohneumbruch\"><a href=\"#anker-38-anchor\">Listing 1<\/a><\/span>).<\/p>\n<p class=\"listingueberschrift\">Listing 1: Diese Prozedur reagiert auf das Anklicken von Kontextmen&uuml;eintr&auml;gen.<\/p>\n<pre>Private Sub objTreeViewHandler_ShortcutMenuClick(objNode As MSComctlLib.Node, _\r\n    strParameter As String, strThistable As String, strTableBase As String, _\r\n    strPKID As String, dblPKIDValue As Double)\r\n    Dim db As DAO.Database\r\n    Dim strKunde As String\r\n    Set db = CurrentDb\r\n    Select Case strParameter\r\n    Case &quot;NeuerKunde&quot;\r\n    strKunde = InputBox(&quot;Kundenname:&quot;)\r\n    If Len(strKunde) &gt; 0 Then\r\n        db.Execute &quot;INSERT INTO tblKunden(Kunde) VALUES(''&quot; &amp; strKunde &amp; &quot;'')&quot;, dbFailOnError\r\n        objTreeViewHandler.FillNode objNode\r\n    End If\r\n    End Select\r\n    End Sub<\/pre>\n<p>Die weiteren Parameter enthalten etwa den Namen der Tabelle, aus der das angeklickte Element stammt, sowie ihr Prim&auml;rschl&uuml;sselfeld und den entsprechenden Wert.<\/p>\n<p><b>Elemente anklicken<\/b><\/p>\n<p>Auch wenn Sie ein Element mit der linken Maustaste anklicken, soll in der Regel eine Reaktion erfolgen. Auch hierf&uuml;r gibt es eine Ereignisprozedur, die schlicht <b>NodeClick <\/b>hei&szlig;t. Die Prozedur liefert mit ihren Parametern die folgenden Informationen:<\/p>\n<ul>\n<li class=\"aufz-hlung\"><b>objNode<\/b>: Verweis auf das angeklickte Element<\/li>\n<li class=\"aufz-hlung\"><b>strTable<\/b>: Tabelle oder Abfrage, aus welcher das Element stammt<\/li>\n<li class=\"aufz-hlung\"><b>strTableBase<\/b>: Basistabelle zu strTable<\/li>\n<li class=\"aufz-hlung\"><b>strPKID<\/b>: Name des Prim&auml;rschl&uuml;ssels<\/li>\n<li class=\"aufz-hlung\"><b>varPKID<\/b>: Prim&auml;rschl&uuml;sselwert<\/li>\n<\/ul>\n<p>Aufgrund dieser Informationen k&ouml;nnen Sie in der Ereignisprozedur entsprechende Schritte einleiten &#8211; etwa einem Unterformularsteuerelement im gleichen Formular ein entsprechendes Unterformular zuzuweisen und den im TreeView ausgew&auml;hlten Datensatz anzuzeigen oder auch ein separates Detailformular zu &ouml;ffnen.<\/p>\n<p>Bild 19.<\/p>\n<p class=\"listingueberschrift\">Listing 2: Beim Klick auf ein TreeView-Element wird ein Meldungsfenster angezeigt.<\/p>\n<pre>Private Sub objTreeViewHandler_NodeClick(objNode As MSComctlLib.Node, strTable As String, _\r\n    strTableBase As String, strPKID As String, dblPKID As Double)\r\n    Select Case strTable\r\n    Case Else\r\n    MsgBox &quot;Klick auf Element der Tabelle ''&quot; &amp; strTable &amp; &quot;'', Prim&auml;rschl&uuml;sselfeld ''&quot; _\r\n    &amp; strPKID &amp; &quot;'', Datensatz-ID ''&quot; &amp; dblPKID &amp; &quot;''&quot;\r\n    End Select\r\n    End Sub<\/pre>\n<p><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2011_02\/TreeViewConfII-web-images\/pic018.png\" alt=\"pic018.png\" \/><\/p>\n<p><b><span style=\"color:darkgrey\">Bild 19: Reaktion auf einen Klick auf eines der TreeView-Elemente<\/span><\/b><\/p>\n<p>Ob Sie nach dem Anklicken ein Detailformular als Unterformular anzeigen oder ob Sie dieses als eigenes Formular &ouml;ffnen, bleibt Ihnen &uuml;berlassen &#8211; das notwendige Handwerkszeug zum Ermitteln des anzuzeigenden Objekts (hier eines Kunden) liefern die Parameter der Ereignisprozedur.<\/p>\n<p><b>Fehlermeldungen<\/b><\/p>\n<p>Der TreeView-Konfigurator ist noch nicht perfekt, sodass hier und da noch Probleme auftauchen k&ouml;nnen. Dies &auml;u&szlig;ert sich durch entsprechende Fehlermeldungen. Wenn Sie diese Fehlermeldungen durch eine eigene Fehlermeldung ersetzen m&ouml;chten, brauchen Sie nur die Ereignisprozedur <b>objTreeViewHandler_Error<\/b> zu implementieren, beispielsweise wie in <span class=\"verweis-ohneumbruch\"><a href=\"#anker-41-anchor\">Listing 3<\/a><\/span>.<\/p>\n<p class=\"listingueberschrift\">Listing 3: Anzeigen einer Fehlermeldung bei Fehlern im TreeView-Konfigurator<\/p>\n<pre>Private Sub objTreeViewHandler_Error(Err As ErrObject, Erl As Long, Module As String, _\r\n    Proc As String, Cancel As Boolean)\r\n    MsgBox &quot;Fehler &quot; &amp; Err.Number &amp; &quot;, ''&quot; &amp; Err.Description &amp; &quot;'' in Zeile &quot; &amp; Erl &amp; vbCrLf _\r\n    &amp; &quot;der Prozedur ''&quot; &amp; Proc &amp; &quot;'' im Modul ''&quot; &amp; Module &amp; &quot;''&quot;\r\n    Cancel = True\r\n    End Sub<\/pre>\n<p><b>Zusammenfassung und Ausblick<\/b><\/p>\n<p>Der TreeView-Konfigurator wurde in vielen Punkten &uuml;berarbeitet und erweitert. Probieren Sie ihn aus und teilen Sie uns mit, wo Sie sich noch Erg&auml;nzungen oder &auml;nderungen w&uuml;nschen &#8211; einfach per E-Mail an <b>info@access-im-unternehmen.de<\/b>.<\/p>\n<p>Der TreeView-Konfigurator bietet noch eine Reihe weiterer M&ouml;glichkeiten, welche auch die Interaktion mit dem Formular erm&ouml;glichen, auf dem sich das TreeView-Steuerelement befindet. Wenn Sie hier Fragen haben, wenden Sie sich ebenfalls an uns.<\/p>\n<p>Einen kleinen Nachteil hat das TreeView-Steuerelement: Wenn Sie ein Element per Drag and Drop kopieren oder verschieben m&ouml;chten und das Zielelement gerade nicht sichtbar ist, k&ouml;nnen Sie nicht wie etwa im Windows Explorer nach oben oder unten scrollen. Da sich dieses Verhalten nicht mit vertretbaren Aufwand nachbilden l&auml;sst, f&uuml;gen wir in einer der n&auml;chsten Ausgaben ein weiteres Feature hinzu, mit dem Sie per Kontextmen&uuml; die Aktionen <b>Ausschneiden<\/b>, <b>Kopieren <\/b>und <b>Einf&uuml;gen <\/b>verwenden k&ouml;nnen.<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>TreeViewConfigurator.mdb<\/p>\n<p>TreeViews.mdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/{43480B68-5940-4F6C-903D-576E6C2ACF00}\/aiu_771.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Beitrag TreeView-Konfigurator (www.access-im-unternehmen.de\/667) haben wir Ihnen den TreeView-Konfigurator vorgestellt, mit der Sie ganz einfach TreeViews mit den Daten aus Ihren Tabellen f&uuml;llen k&ouml;nen. Diese L&ouml;sung haben wir kr&auml;ftig &uuml;berarbeitet: Sie k&ouml;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.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022011,662011,44000023],"tags":[],"class_list":["post-55000771","post","type-post","status-publish","format-standard","hentry","category-66022011","category-662011","category-Mit_Formularen_arbeiten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.9 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>TreeView-Konfigurator erweitert - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TreeView-Konfigurator erweitert\" \/>\n<meta property=\"og:description\" content=\"Im Beitrag TreeView-Konfigurator (www.access-im-unternehmen.de\/667) haben wir Ihnen den TreeView-Konfigurator vorgestellt, mit der Sie ganz einfach TreeViews mit den Daten aus Ihren Tabellen f&uuml;llen k&ouml;nen. Diese L&ouml;sung haben wir kr&auml;ftig &uuml;berarbeitet: Sie k&ouml;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.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-22T22:02:25+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg08.met.vgwort.de\/na\/fb59f9dc8a324c5ebd4f72035ec73af4\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"27\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\"},\"headline\":\"TreeView-Konfigurator erweitert\",\"datePublished\":\"2020-05-22T22:02:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/\"},\"wordCount\":5094,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/fb59f9dc8a324c5ebd4f72035ec73af4\",\"articleSection\":[\"2\\\/2011\",\"2011\",\"Mit Formularen arbeiten\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/\",\"name\":\"TreeView-Konfigurator erweitert - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/fb59f9dc8a324c5ebd4f72035ec73af4\",\"datePublished\":\"2020-05-22T22:02:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/fb59f9dc8a324c5ebd4f72035ec73af4\",\"contentUrl\":\"http:\\\/\\\/vg08.met.vgwort.de\\\/na\\\/fb59f9dc8a324c5ebd4f72035ec73af4\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/TreeViewKonfigurator_erweitert\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"TreeView-Konfigurator erweitert\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"TreeView-Konfigurator erweitert - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/","og_locale":"de_DE","og_type":"article","og_title":"TreeView-Konfigurator erweitert","og_description":"Im Beitrag TreeView-Konfigurator (www.access-im-unternehmen.de\/667) haben wir Ihnen den TreeView-Konfigurator vorgestellt, mit der Sie ganz einfach TreeViews mit den Daten aus Ihren Tabellen f&uuml;llen k&ouml;nen. Diese L&ouml;sung haben wir kr&auml;ftig &uuml;berarbeitet: Sie k&ouml;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.","og_url":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/","og_site_name":"Access im Unternehmen","article_published_time":"2020-05-22T22:02:25+00:00","og_image":[{"url":"http:\/\/vg08.met.vgwort.de\/na\/fb59f9dc8a324c5ebd4f72035ec73af4","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"27\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f"},"headline":"TreeView-Konfigurator erweitert","datePublished":"2020-05-22T22:02:25+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/"},"wordCount":5094,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/fb59f9dc8a324c5ebd4f72035ec73af4","articleSection":["2\/2011","2011","Mit Formularen arbeiten"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/","url":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/","name":"TreeView-Konfigurator erweitert - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/#primaryimage"},"thumbnailUrl":"http:\/\/vg08.met.vgwort.de\/na\/fb59f9dc8a324c5ebd4f72035ec73af4","datePublished":"2020-05-22T22:02:25+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/#primaryimage","url":"http:\/\/vg08.met.vgwort.de\/na\/fb59f9dc8a324c5ebd4f72035ec73af4","contentUrl":"http:\/\/vg08.met.vgwort.de\/na\/fb59f9dc8a324c5ebd4f72035ec73af4"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/TreeViewKonfigurator_erweitert\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"TreeView-Konfigurator erweitert"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000771","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55000771"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55000771\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55000771"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55000771"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55000771"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}