vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: Access   |   VB-Versionen: VBA27.05.05
TreeView-Control und Access (Access 2000)

Darstellen von Daten aus 2 Tabellen in einem TreeView unter Berücksichtigung einer 1:n Relation.

Autor:   Christoph Wruck (Intracs Development©)Bewertung:     [ Jetzt bewerten ]Views:  30.442 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Das folgende Beispiel zeigt, wie man in Access mit Hilfe eines TreeView-Controls, 2-Tabellen einer 1:n Relation in Ebenen darstellen kann. Der Verwendungszweck ist vielseitig einsetzbar z.B. in einer kleinen Dokumentenablage, die in der ersten Ebene das eigenliche Dokument darstellt und in der zweiten Ebene den Link zu einem Dokument wiederspiegelt.

Allgemeine Informationen/ benötigte Steuerelemente:

  1. TreeView-Steuerelement/ MSComctl.OCX
  2. ImageListControl/ MSComctl.OCX

Hinweise:
Mit unter kann es passieren, dass es bei der Registrierung des MScomctl.OCX zu Problemen kommt.

Vorgehensweise

1. Neues Formular erstellen und unter "weitere Steuerelemente" der Toolbox das ImageListControl 6.0 (SP6) sowie das TreeViewControl 6.0 (SP2) in das Formular einbringen.

1.1 Tragen Sie in den Eigenschaften der Steuerelmente jeweilig den Namen der Steuerelemente ein. Standardmäßig ist dieser schon vergeben, kann aber geändert werden.

1.2 Durch einen Doppelklick auf das TreeViewControl gelangen Sie in die "Eigenschaften von TreeCtl". Registrieren Sie dort unter dem Punkt "ImageList" das ImageListControl

1.3 Durch einen Doppelklick auf das ImageListControl gelangen Sie in die "Eigenschaften von ImageListControll". Klicken Sie die Registerkarte "Image" an und wählen Sie unter "insert Image" ihre Bildsymbole aus.

2. Erstellen Sie ein neues Modul und tragen Sie folgenden Code ein (Code dürfte ausreichend beschrieben sein):

Option Compare Database
Option Explicit
 
' Autor: Christoph Wruck/ Intracs Development© 2001
Public Function fncFillListView(FirstDomain As String, _
  SecondDomain As String, _
  Ctrl As Object, Expand As Boolean)
 
  Dim ObjTreeView As Object
  Dim NodeLevel1 As Node
  Dim NodeLevel2 As Node
  Dim Node As Node
 
  Dim db As Database
  Dim RsLevel1 As Recordset
  Dim RsLevel2 As Recordset
  Dim ValueCount1 As Long
  Dim ValueTotCount1 As Long
  Dim ValueCount2 As Long
  Dim ValueTotCount2 As Long
 
  Set db = CurrentDb()      ' db Setzen
  Set ObjTreeView = Ctrl    ' Steuerelement zuordnen
  ObjTreeView.Sorted = True ' Sortierung ja/nein
 
  ' Setze den Recordset unter Berücksichtigung der FirstDomain(1. Tabelle)
  Set RsLevel1 = db.OpenRecordset(FirstDomain, dbOpenDynaset)
 
  RsLevel1.MoveLast                     ' gehe zum letzten Datensatz der Tabelle
  ValueTotCount1 = RsLevel1.RecordCount ' zähle die Datensätze
  RsLevel1.MoveFirst                    ' gehe zum ersten Datensatz
 
  ' lösche alle Einträge des Steuerelementes
  ObjTreeView.Nodes.clear 
 
  ' öffne die "For/Next"- Schleife und setze Einträge/Datensätze 
  ' der 1. Tabelle in die erste Ebene des TreeView
  For ValueCount1 = 1 To ValueTotCount1
    Set NodeLevel1 = ObjTreeView.Nodes.Add(, , RsLevel1!Item, RsLevel1!Item, 1)
    ' lade das Image mit dem Index "2" aus dem ImageListControl 
    ' bei Expansion des Knotenpunktes
    NodeLevel1.ExpandedImage = 2 
 
    ' Setze den Recordset unter Berücksichtigung der SecondDomain(2. Tabelle)
    Set RsLevel2 = db.OpenRecordset(SecondDomain, dbOpenDynaset)
 
    RsLevel2.MoveLast
    ValueTotCount2 = RsLevel2.RecordCount
    RsLevel2.MoveFirst
 
    ' öffne die "For/Next"- Schleife und setze Einträge/Datensätze 
    ' der 2. Tabelle in die zweite Ebene des TreeView
    For ValueCount2 = 1 To ValueTotCount2
      If RsLevel1!ID = RsLevel2!ID Then
        Set NodeLevel2 = ObjTreeView.Nodes.Add(NodeLevel1, tvwChild, , RsLevel2!Item, 3)
        RsLevel2.MoveNext
      Else
        RsLevel2.MoveNext
      End If
    Next 
    RsLevel1.MoveNext
  Next
 
  ' schließe die Recordsets
  RsLevel1.Close 
  RsLevel2.Close
  db.Close
  Set db = Nothing
 
  ' alle Elternknoten werden Expandiert
  For Each Node In Ctrl.Nodes
    Node.Expanded = Expand 
  Next
End Function

3. Erstellen Sie 2 Tabellen und vergeben Sie Namen an die Tabellen

4. Tragen Sie nun im Formularereignis "Bei Laden" folgenden Funktionaufruf an:

Call fncFillListView("DeineTabelle1", "DeineTabelle2", Me!DeinSteuerelement, True)

Hier wird die Funktion aufgerufen unter Berücksichtigung der Tabellen und des Namens deines Steuerlementes.
Der letzte Parameter gibt die Expansion der Knoten in "true/false" an, d.h. bei "true" Expandiere alle Knoten und bei false kollabieren alle Knoten und bleiben zusammen!

Das war es und viel Spaß mit dem Code.
 

Dieser Tipp wurde bereits 30.442 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2019 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel