Access
 sql >> Datenbank >  >> RDS >> Access

TreeView-Steuerelement mit Unterformularen

Einführung.

In dieser Sitzung des Tutorials zum TreeView-Steuerelement verwenden wir zwei Unterformulare zusammen mit dem TreeView-Steuerelement auf dem Hauptformular frmTreeViewtab . Wir haben das ImageList-Steuerelement mit den vorinstallierten Bildern aus unserem früheren Demo-Projekt importiert.
Wir werden dieselbe lvCategory verwenden und lvProducts Tabellen, die wir für unsere früheren Projekte. verwendet haben
Die lvCategory Primärschlüssel der Tabelle field (CID) und Description field (Category) Werte sind der Key der TreeView Nodes Add() Methode und Text Parameterwerte.

Die lvProducts Die Tabelle enthält detaillierte Informationen zu jedem Produkt wie Produktcode, Beschreibung, Lagereinheit, Menge und Listenpreis.

Außerdem die lvProducts Tabelle hat die ParentID Feld, das mit dem Wert des Kategoriecodes (CID) aktualisiert wurde. Alle Produktartikel, die zu einer bestimmten Kategorie gehören, werden mit dem CID-Feldwert (Kategorie-ID) im Feld ParentID aktualisiert. Auf diese Weise haben beide Tabellen die Master-Child-Beziehung.

Die Produktdatensätze haben zwei Unterformulare auf den Registerkartensteuerungsseiten. Die erste Seite hat die Daten Ansicht Unterformular und die zweite Seite hat das Bearbeiten Unterformular. Das erste Registerkartensteuerelement Page zeigt alle Produktdatensätze an, die zu einer bestimmten Kategorie des TreeView-Steuerelements gehören. Die Datensätze des ersten Unterformulars werden zur Ansicht und zur Auswahl eines bestimmten Datensatzes zur Bearbeitung im zweiten Unterformular angezeigt.

Die Strömung Datensatz oder vom Benutzer ausgewählt Der Datensatz im ersten Unterformular steht zur Bearbeitung im zweiten Unterformular auf der zweiten Seite des Tab-Steuerelements zur Verfügung. Die grau hinterlegten Schlüsselfelder sind gesperrt und können nicht bearbeitet werden.

Baumansicht mit Entwurfsansicht für Unterformulare.

Die Designansicht des Formulars frmTreeViewTab ist unten angegeben:

Die ersten beiden ungebundenen Textfelder im Hauptformular werden aktualisiert, wenn der Benutzer ein Category-Element aus dem TreeView-Steuerelement auswählt.

Das dritte ungebundene Textfeld (Name p_ID) wird zunächst mit dem eindeutigen ID-Wert (PID) des ersten Produktdatensatzes aktualisiert, andernfalls wird der Wert des vom Benutzer ausgewählten Datensatzes aktualisiert. Der ausgewählte Produktdatensatz im ersten Teilformular steht im zweiten Teilformular für Änderungen zur Verfügung.

Links zu früheren Tutorial-Sitzungen.

Die Links zu früheren Tutorial-Sitzungen sind unten als Referenz angegeben:

  1. Tutorial für das Microsoft TreeView-Steuerelement
  2. Zugriffsmenü mit TreeView-Steuerelement erstellen
  3. Bilder dem TreeView-Steuerelement zuweisen
  4. Zuweisen von Bildern zu TreeView Control-2
  5. TreeView Control-Häkchen hinzufügen Knoten löschen
  6. TreeView ImageCombo-Dropdown-Zugriffsmenü
  7. TreeView-Knoten per Drag-and-Drop neu anordnen
  8. ListView Control mit MS-Access TreeView
  9. Drag-Drop-Ereignisse des ListView-Steuerelements

Die CatId ungebundenes Textfeld ist das [Link Master Fields] Eigenschaftswert des ersten Unterformulars.

Der Produktcode im dritten ungebundenen Textfeld (p_ID ) ist mit [Link Master Fields] verknüpft Eigenschaftswert des zweiten Unterformulars in der Ansicht Registerkarte Seite.

Die p_ID Der ungebundene Textfeldwert wird aktualisiert, wenn der Inhalt des ersten Unterformulars aktualisiert wird oder wenn ein Element vom Benutzer ausgewählt wird.

Normale Ansicht des Bildschirms.

Die normale Ansicht des frmTreeViewTab Formular ist unten angegeben:


Die Schlüsselfelder im Produktdatensatz im zweiten Unterformular mit grauer Vorfarbe sind gesperrt und dürfen den Inhalt nicht ändern.

Das Formular frmTreeViewTab VBA-Code des Klassenmoduls:

Option Compare Database
Option Explicit

Dim tv As MSComctlLib.TreeView
Dim imgList As MSComctlLib.ImageList
Const Prfx As String = "X"

Private Sub Form_Load()
Dim db As DAO.Database
Dim tbldef As TableDef

'Initialize TreeView Nodes
    Set tv = Me.TreeView0.Object
    tv.Nodes.Clear
'Initialixe ImageList Object
    Set imgList = Me.ImageList3.Object
    
'Modify TreeView Font Properties
With tv
    .Font.Size = 9
    .Font.Name = "Verdana"
    .ImageList = imgList 'assign preloaded imagelist control
 End With
    
   LoadTreeView 'Create TreeView Nodes

End Sub

Private Sub LoadTreeView()
    Dim Nod As MSComctlLib.Node
    Dim strCategory As String
    Dim strCatKey As String
    Dim strProduct As String
    Dim strPKey As String
    Dim strBelongsTo As String
    Dim strSQL As String
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    
    'Initialize treeview nodes
     tv.Nodes.Clear
    
    strSQL = "SELECT lvCategory.CID, lvCategory.Category, "
    strSQL = strSQL & "lvcategory.BelongsTo FROM lvCategory ORDER BY lvCategory.CID;"
    
    Set db = CurrentDb
    Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)

    ' Populate all Records as Rootlevel Nodes
    Do While Not rst.BOF And Not rst.EOF
        If rst.AbsolutePosition = 1 Then
           Me![CatID] = rst![CID]
        End If
            strCatKey = Prfx & CStr(rst!CID)
            strCategory = rst!Category
            
            Set Nod = tv.Nodes.Add(, , strCatKey, strCategory, 1, 2)
            Nod.Tag = rst!CID
        rst.MoveNext
    Loop
    
    'In the second pass of the the same set of records
    'Move Child Nodes under their Parent Nodes
    rst.MoveFirst
    Do While Not rst.BOF And Not rst.EOF
        strBelongsTo = Nz(rst!BelongsTo, "")
        If Len(strBelongsTo) > 0 Then
            strCatKey = Prfx & CStr(rst!CID)
            strBelongsTo = Prfx & strBelongsTo
            strCategory = rst!Category
            
            Set tv.Nodes.Item(strCatKey).Parent = tv.Nodes.Item(strBelongsTo)
        End If
        rst.MoveNext
    Loop
    rst.Close
    

    TreeView0_NodeClick tv.Nodes.Item(1)
    
End Sub

Private Sub TreeView0_NodeClick(ByVal Node As Object)
Dim Cat_ID As String

'Initialize hidden unbound textbox 'Link Master Field' values
Cat_ID = Node.Tag
Me!CatID = Cat_ID
Me![xCategory] = Node.Text

End Sub

Private Sub cmdExit_Click()
    DoCmd.Close
End Sub


Da die Verwendung von TreeView Control und ImageList Control und deren Funktionsweise in den früheren Sitzungen ausführlich erläutert wurde, werden Sie nur einige dieser früheren VBA-Subroutinen im obigen Formularmodul finden.

Wir haben bisher mehrere Bildschirme mit MS-Access TreeView, ListView, ImageList und ImageCombo Control entworfen und ich hoffe, Sie finden sie als guten Bezugspunkt für Ihr eigenes Projekt-Interface-Design.

MS-Office-Versionsprobleme für TreeView Control.

Wenn Sie Probleme beim Ausführen der Demo-Datenbank in Ihrer Version von Microsoft Access hatten, finden Sie unter dem folgenden Link einige Korrekturmaßnahmen, die hilfreich sein können, um Ihr Problem zu lösen:

Früher liefen die oben genannten Steuerelemente nicht unter 64-Bit-Systemen. Aber im September 2017 hat Microsoft ein Update der MSCOMCTL.OCX-Bibliothek herausgebracht, und der folgende Auszug des Microsoft-Dokuments ist unten zu Ihrer Information aufgeführt:

Klicken Sie auf das obige Dokumentbild, um den vollständigen Text des 2017 Update:1707-Dokuments anzuzeigen. Der folgende Link schlägt einige hilfreiche Hinweise vor.
  • GELÖST MSCOMCTL.OCX-DOWNLOAD REGISTRIEREN 64-BIT-WINDOWS

Mit der Verwendung der obigen TreeView-Steuerelementobjekte können wir besser aussehende und leistungsfähigere Benutzeroberflächen für unsere neuen Projekte erstellen.

Laden Sie die Demo-Datenbank herunter.