Access
 sql >> Database >  >> RDS >> Access

Controllo TreeView con sottomaschere

Introduzione.

In questa sessione dell'esercitazione sul controllo TreeView, utilizzeremo due sottomoduli insieme al controllo TreeView nel modulo principale frmTreeViewtab . Abbiamo importato il controllo ImageList con le immagini precaricate dal nostro precedente progetto demo.
Utilizzeremo la stessa lvCategory e lvProducts Tabelle che abbiamo utilizzato per i nostri progetti precedenti.
La lvCategory Chiave primaria della tabella I valori del campo (CID) e del campo Descrizione (Categoria) sono la Chiave del metodo TreeView Nodes Add() e Testo rispettivamente i valori dei parametri.

I lvProducts La tabella contiene informazioni dettagliate su ciascun prodotto come codice prodotto, descrizione stock-unità-quantità e prezzo di listino.

Oltre a ciò, i lvProducts la tabella ha il ID genitore campo aggiornato con il valore del codice categoria (CID). Tutti gli articoli di prodotto che appartengono a una particolare categoria vengono aggiornati con il valore del campo CID (ID categoria) nel campo ParentID. In questo modo entrambe le tabelle hanno la relazione master-child.

I record del prodotto hanno due sottomaschere nelle pagine di controllo a schede. La prima Pagina contiene i dati Visualizza sottomodulo e la seconda Pagina ha il Modifica sottomodulo. La prima pagina del controllo struttura a schede mostra tutti i record del prodotto che appartengono a una particolare categoria del controllo TreeView. I record della prima sottomaschera vengono visualizzati per la visualizzazione e per la selezione di un record particolare per la modifica nella seconda sottomaschera.

La corrente record o selezionato dall'utente record nella prima sottomaschera è disponibile per la modifica nella seconda sottomaschera, nella seconda pagina del controllo struttura a schede. I campi chiave evidenziati in grigio sono bloccati e non possono essere modificati.

TreeView con vista struttura sottomoduli.

La vista Design del modulo frmTreeViewTab è riportato di seguito:

Le prime due caselle di testo non associate nel form principale vengono aggiornate quando l'utente seleziona un elemento di categoria dal controllo TreeView.

La terza casella di testo non associata (nome p_ID) viene inizialmente aggiornata con il valore dell'ID univoco (PID) del primo record del prodotto, altrimenti il ​​valore del record selezionato dall'utente viene aggiornato. Il record del prodotto selezionato nella prima sottomaschera è disponibile nella seconda sottomaschera per le modifiche.

Link a sessioni di tutorial precedenti.

Di seguito sono riportati i collegamenti alle sessioni del tutorial precedenti per un rapido riferimento:

  1. Esercitazione sul controllo di Microsoft TreeView
  2. Creazione del menu di accesso con il controllo TreeView
  3. Assegnazione di immagini al controllo TreeView
  4. Assegnazione di immagini a TreeView Control-2
  5. Segnale di spunta Controllo TreeView Aggiungi Elimina nodi
  6. Menu di accesso a discesa TreeView ImageCombo
  7. Riorganizza i nodi TreeView trascinandoli e rilasciandoli
  8. Controllo ListView con TreeView di MS-Access
  9. Eventi di trascinamento della selezione di controllo ListView

Il CatId La casella di testo non rilegata è il [Link Master Fields] Valore della proprietà della prima sottomaschera.

Il codice prodotto nella terza casella di testo non rilegata (p_ID ) è collegato ai [Link Master Fields] valore della proprietà della seconda sottomaschera in Visualizza Scheda Pagina.

Il p_ID il valore della casella di testo non associato viene aggiornato quando il contenuto della prima sottomaschera viene aggiornato o quando un elemento selezionato dall'utente.

Vista normale dello schermo.

La visualizzazione normale di frmTreeViewTab il modulo è riportato di seguito:


I campi Chiave del record Prodotto nel secondo sottomodulo, con il colore grigio in primo piano, sono bloccati e non possono modificare i contenuti.

Il modulo frmTreeViewTab Codice VBA del modulo di 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


Poiché l'utilizzo di TreeView Control e ImageList Control e il loro funzionamento sono stati tutti spiegati in dettaglio nelle sessioni precedenti, nel modulo di cui sopra verranno visualizzate solo alcune di quelle subroutine VBA precedenti.

Finora abbiamo progettato diverse schermate con MS-Access TreeView, ListView, ImageList e ImageCombo Control e spero che le troverai come un buon punto di riferimento per la progettazione della tua interfaccia di progetto.

Problemi con la versione di MS-Office per il controllo TreeView.

Se hai riscontrato problemi nell'esecuzione del database demo nella tua versione di Microsoft Access, puoi fare riferimento al seguente link per alcune azioni correttive, che potrebbero essere utili per risolvere il tuo problema:

In precedenza, i controlli di cui sopra non erano in esecuzione con sistemi a 64 bit. Tuttavia, a settembre 2017 Microsoft ha pubblicato un aggiornamento della libreria MSCOMCTL.OCX e il seguente estratto del documento Microsoft è riportato di seguito per tua informazione:

Fai clic sull'immagine del documento sopra per il testo completo dell'aggiornamento 2017:documento 1707. Il seguente link suggerisce alcuni suggerimenti utili.
  • RISOLTO MSCOMCTL.OCX DOWNLOAD REGISTRO WINDOWS A 64 BIT

Con l'uso degli oggetti di controllo TreeView sopra, possiamo creare interfacce utente più belle e con prestazioni migliori per i nostri nuovi progetti.

Scarica il database demo.