Access
 sql >> Base de données >  >> RDS >> Access

Contrôle TreeView avec sous-formulaires

Présentation.

Dans cette session du didacticiel sur le contrôle TreeView, nous utiliserons deux sous-formulaires avec le contrôle TreeView sur le formulaire principal frmTreeViewtab . Nous avons importé le contrôle ImageList avec les images préchargées de notre projet de démonstration précédent.
Nous utiliserons la même lvCategory et lvProducts Tableaux que nous avons utilisés pour nos projets précédents.
La lvCatégorie Clé primaire de la table Les valeurs du champ (CID) et du champ Description (Catégorie) sont la Clé de la méthode TreeView Nodes Add(). et Texte valeurs des paramètres, respectivement.

Les lvProducts Le tableau contient des informations détaillées sur chaque produit, telles que le code produit, la description de la quantité d'unité de stock et le prix catalogue.

En plus de cela, les lvProducts la table a le ParentID champ mis à jour avec la valeur du code de catégorie (CID). Tous les articles de produit qui appartiennent à une catégorie particulière sont mis à jour avec la valeur du champ CID (ID de catégorie) dans le champ ParentID. De cette façon, les deux tables ont la relation maître-enfant.

Les enregistrements de produit ont deux sous-formulaires sur les pages de contrôle des onglets. La première page contient les données View sous-formulaire et la deuxième page a le Modifier sous-formulaire. La première page de contrôle d'onglet affiche tous les enregistrements de produit qui appartiennent à une catégorie particulière du contrôle TreeView. Les premiers enregistrements de sous-formulaire sont affichés pour être visualisés et pour sélectionner un enregistrement particulier à modifier dans le deuxième sous-formulaire.

Le courant enregistrement ou sélectionné par l'utilisateur l'enregistrement du premier sous-formulaire est disponible pour modification dans le deuxième sous-formulaire, sur la deuxième page du contrôle Onglet. Les champs clés surlignés en gris sont verrouillés et ne peuvent pas être modifiés.

TreeView avec vue de conception de sous-formulaires.

La vue Design du formulaire frmTreeViewTab est donné ci-dessous :

Les deux premières zones de texte indépendantes du formulaire principal sont mises à jour lorsque l'utilisateur sélectionne un élément de catégorie dans le contrôle TreeView.

La troisième zone de texte non liée (nom p_ID) est initialement mise à jour avec la valeur d'ID unique (PID) du premier enregistrement de produit, sinon la valeur de l'enregistrement sélectionné par l'utilisateur est mise à jour. La fiche produit sélectionnée sur le premier sous-formulaire est disponible sur le second sous-formulaire pour modification.

Liens vers les sessions de didacticiel précédentes.

Les liens de session de didacticiel précédents sont donnés ci-dessous pour référence :

  1. Tutoriel sur le contrôle Microsoft TreeView
  2. Création d'un menu d'accès avec le contrôle TreeView
  3. Affectation d'images au contrôle TreeView
  4. Affectation d'images à TreeView Control-2
  5. TreeView Control-Mark Add Delete Nodes
  6. Menu déroulant d'accès TreeView ImageCombo
  7. Réorganiser les nœuds TreeView par glisser-déposer
  8. Contrôle ListView avec MS-Access TreeView
  9. Événements de glisser-déposer de contrôle ListView

Le CatId la zone de texte non liée est le [Link Master Fields] Valeur de propriété du premier sous-formulaire.

Le code produit sur la troisième zone de texte indépendante (p_ID ) est lié au [Link Master Fields] valeur de la propriété du deuxième sous-formulaire sur la vue Page d'onglet.

Le p_ID la valeur de la zone de texte non liée est mise à jour lorsque le contenu du premier sous-formulaire est actualisé ou lorsqu'un élément est sélectionné par l'utilisateur.

Vue normale de l'écran.

La vue normale du frmTreeViewTab formulaire est donné ci-dessous :


Les champs Clé de l'enregistrement Produit du deuxième sous-formulaire, avec une couleur grise, sont verrouillés et ne sont pas autorisés à modifier le contenu.

Le formulaire frmTreeViewTab Code VBA du module de classe :

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


Étant donné que l'utilisation de TreeView Control et ImageList Control et leur fonctionnement ont tous été expliqués en détail dans les sessions précédentes, vous ne trouverez que quelques-unes de ces sous-routines VBA antérieures dans le module de formulaire ci-dessus.

Jusqu'à présent, nous avons conçu plusieurs écrans avec MS-Access TreeView, ListView, ImageList et ImageCombo Control et j'espère que vous les trouverez comme un bon point de référence pour votre propre conception d'interface de projet.

Problèmes de version MS-Office pour TreeView Control.

Si vous rencontrez des problèmes lors de l'exécution de la base de données de démonstration dans votre version de Microsoft Access, vous pouvez vous référer au lien suivant pour certaines actions correctives, qui peuvent être utiles pour résoudre votre problème :

Auparavant, les contrôles ci-dessus ne fonctionnaient pas sous les systèmes 64 bits. Mais, en septembre 2017, Microsoft a publié une mise à jour de la bibliothèque MSCOMCTL.OCX et l'extrait suivant du document Microsoft est donné ci-dessous pour votre information :

Cliquez sur l'image du document ci-dessus pour obtenir le texte intégral de la mise à jour 2017 :1707. Le lien suivant propose quelques conseils utiles.
  • RÉSOLU MSCOMCTL.OCX TÉLÉCHARGEMENT REGISTRE 64 BITS WINDOWS

Avec l'utilisation des objets de contrôle TreeView ci-dessus, nous pouvons créer des interfaces utilisateur plus belles et plus performantes pour nos nouveaux projets.

Téléchargez la base de données de démonstration.