sql >> Base de Datos >  >> RDS >> Access

Control TreeView con subformularios

Introducción.

En esta sesión del tutorial del control TreeView, usaremos dos subformularios junto con el control TreeView en el formulario principal frmTreeViewtab . Hemos importado el control ImageList con las imágenes precargadas de nuestro proyecto de demostración anterior.
Utilizaremos la misma lvCategory y lvProductos Tablas que hemos usado para nuestros Proyectos anteriores.
La categoría lv Clave principal de la tabla Los valores de campo (CID) y campo de descripción (categoría) son la clave del método TreeView Nodes Add() y Texto valores de parámetros, respectivamente.

Los lvProducts La tabla tiene información detallada sobre cada producto, como el código del producto, la descripción, la cantidad unitaria de existencias y el precio de lista.

Además de eso, los lvProducts la tabla tiene el ParentID campo que se actualizó con el valor del código de categoría (CID). Todos los artículos de productos que pertenecen a una categoría en particular se actualizan con el valor del campo CID (ID de categoría) en el campo ParentID. De esta manera, ambas tablas tienen la relación maestro-hijo.

Los registros de productos tienen dos subformularios en las páginas de control de pestañas. La primera Página tiene los datos Ver subformulario y la segunda página tiene el Editar subformulario La primera página de control de pestaña muestra todos los registros de productos que pertenecen a una categoría particular del control TreeView. Los registros del primer subformulario se muestran para su visualización y para seleccionar un registro en particular para editarlo en el segundo subformulario.

La actual registro o seleccionado por el usuario el registro en el primer subformulario está disponible para editar en el segundo subformulario, en la segunda página del control de pestaña. Los campos clave resaltados en color gris están bloqueados y no se pueden editar.

TreeView con vista de diseño de subformularios.

La vista de diseño del formulario frmTreeViewTab se da a continuación:

Los dos primeros cuadros de texto independientes del formulario principal se actualizan cuando el usuario selecciona un elemento de categoría del control TreeView.

El tercer cuadro de texto independiente (nombre p_ID) se actualiza inicialmente con el valor de ID único (PID) del primer registro de producto; de lo contrario, se actualiza el valor del registro seleccionado por el usuario. El registro del producto seleccionado en el primer subformulario está disponible en el segundo subformulario para modificaciones.

Enlaces a sesiones de tutoría anteriores.

Los enlaces de sesiones de tutoriales anteriores se proporcionan a continuación como referencia:

  1. Tutorial de control TreeView de Microsoft
  2. Creación del menú de acceso con TreeView Control
  3. Asignación de imágenes al control TreeView
  4. Asignación de imágenes a TreeView Control-2
  5. Control de TreeView Marca de verificación Agregar Eliminar nodos
  6. Menú de acceso desplegable TreeView ImageCombo
  7. Reorganizar los nodos de TreeView arrastrando y soltando
  8. Control ListView con MS-Access TreeView
  9. Eventos de arrastrar y soltar de control ListView

El IdCat el cuadro de texto independiente es [Link Master Fields] Valor de propiedad del primer subformulario.

El código de producto en el tercer cuadro de texto independiente (p_ID ) está vinculado a [Enlazar campos maestros] valor de propiedad del segundo subformulario en la Vista Pestaña de página.

El p_ID El valor del cuadro de texto independiente se actualiza cuando se actualiza el contenido del primer subformulario o cuando el usuario selecciona un elemento.

Vista normal de la pantalla.

La vista normal de frmTreeViewTab El formulario se proporciona a continuación:


Los campos clave en el registro del producto en el segundo subformulario, con el primer plano gris, están bloqueados y no se les permite modificar el contenido.

El formulario frmTreeViewTab Código VBA del módulo de clase:

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


Dado que el uso de TreeView Control y ImageList Control y su funcionamiento se explicaron en detalle en las sesiones anteriores, encontrará que solo algunas de esas subrutinas VBA anteriores aparecen en el módulo de formulario anterior.

Hemos diseñado varias pantallas con MS-Access TreeView, ListView, ImageList e ImageCombo Control hasta ahora y espero que las encuentre como un buen punto de referencia para su propio diseño de interfaz de proyecto.

Problemas de versión de MS-Office para TreeView Control.

Si tuvo algún problema al ejecutar la base de datos de demostración en su versión de Microsoft Access, puede consultar el siguiente enlace para algunas acciones correctivas, que pueden ser útiles para resolver su problema:

Anteriormente, los controles anteriores no se ejecutaban en sistemas de 64 bits. Pero, en septiembre de 2017, Microsoft lanzó una actualización de la biblioteca MSCOMCTL.OCX y el siguiente extracto del documento de Microsoft se proporciona a continuación para su información:

Haga clic en la imagen del documento anterior para ver el texto completo de la Actualización de 2017:Documento 1707. El siguiente enlace sugiere algunos consejos útiles.
  • SOLUCIONADO MSCOMCTL.OCX DESCARGAR REGISTRO WINDOWS DE 64 BITS

Con el uso de los objetos de control TreeView anteriores, podemos crear interfaces de usuario más atractivas y de mejor rendimiento para nuestros nuevos proyectos.

Descargue la base de datos de demostración.