Access
 sql >> Base de Dados >  >> RDS >> Access

Controle TreeView com Subformulários

Introdução.

Nesta Sessão do Tutorial do Controle TreeView, usaremos dois Subformulários junto com o controle TreeView no formulário principal frmTreeViewtab . Importamos o controle ImageList com as imagens pré-carregadas de nosso projeto de demonstração anterior.
Usaremos a mesma lvCategory e lvProdutos Tabelas que usamos para nossos projetos anteriores.
A lvCategory Chave primária da tabela Os valores do campo (CID) e do campo Descrição (Categoria) são a Chave do método TreeView Nodes Add() e Texto valores de parâmetro, respectivamente.

Os lvProducts A tabela contém informações detalhadas sobre cada produto, como código do produto, descrição da quantidade de unidade de estoque e preço de tabela.

Além disso, os lvProducts tabela tem o ParentID campo que foi atualizado com o valor do código de categoria (CID). Todos os itens de produto que pertencem a uma determinada categoria são atualizados com o valor do campo CID (ID da categoria) no campo ParentID. Dessa forma, ambas as Tabelas têm o relacionamento mestre-filho.

Os registros do produto têm dois subformulários nas páginas de controle de guia. A primeira página tem os dados Visualizar subformulário e a segunda página tem o Editar subformulário. A primeira página de controle de guia exibe todos os registros de produto que pertencem a uma determinada categoria do controle TreeView. Os primeiros registros do subformulário são exibidos para visualização e seleção de um registro específico para edição no segundo subformulário.

O atual registro ou selecionado pelo usuário registro no primeiro subformulário está disponível para edição no segundo subformulário, na segunda página do controle Tab. Os campos-chave destacados com cor cinza são bloqueados e não podem ser editados.

TreeView com visualização de design de subformulários.


A visualização de design do formulário frmTreeViewTab é dado abaixo:

As duas primeiras caixas de texto não acopladas no formulário principal são atualizadas quando o usuário seleciona um item de categoria do controle TreeView.

A terceira caixa de texto não vinculada (nome p_ID) é inicialmente atualizada com o valor de ID exclusivo (PID) do primeiro registro de produto, caso contrário, o valor do registro selecionado pelo usuário é atualizado. O registro do produto selecionado no primeiro subformulário está disponível no segundo subformulário para modificações.

Links para sessões de tutorial anteriores.


Os links de sessão de tutorial anteriores são fornecidos abaixo para referência imediata:
  1. Tutorial de controle do Microsoft TreeView
  2. Criando menu de acesso com controle TreeView
  3. Atribuindo imagens ao controle TreeView
  4. Atribuindo imagens ao TreeView Control-2
  5. Marque de seleção de controle do TreeView Adicionar nós de exclusão
  6. Menu de acesso suspenso do TreeView ImageCombo
  7. Reorganize os nós do TreeView arrastando e soltando
  8. Controle de ListView com MS-Access TreeView
  9. Eventos de arrastar e soltar do controle ListView

O CatId caixa de texto não vinculada é o [Campos mestres do link] Valor da propriedade do primeiro subformulário.

O código do produto na terceira caixa de texto não vinculada (p_ID ) está vinculado aos [Link Master Fields] valor da propriedade do segundo subformulário na Visualização Aba Página.

O p_ID O valor da caixa de texto não vinculada é atualizado quando o conteúdo do primeiro subformulário é atualizado ou quando um item é selecionado pelo usuário.

Visão normal da tela.


A visualização normal da frmTreeViewTab formulário é dado abaixo:



Os campos Chave no registro Produto no segundo subformulário, com primeira cor cinza, estão bloqueados e não têm permissão para modificar o conteúdo.

O formulário frmTreeViewTab Código VBA do módulo 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



Como o uso do TreeView Control e do ImageList Control e seu funcionamento foram explicados em detalhes nas sessões anteriores, você encontrará apenas algumas dessas sub-rotinas VBA anteriores que aparecem no módulo acima.

Nós projetamos várias telas com o MS-Access TreeView, ListView, ImageList e ImageCombo Control até agora e espero que você as encontre como um bom ponto de referência para seu próprio design de interface de projeto.

Problemas de versão do MS-Office para controle TreeView.


Se você teve algum problema ao executar o banco de dados de demonstração em sua versão do Microsoft Access, consulte o link a seguir para obter algumas ações corretivas, que podem ser úteis para resolver seu problema:

Anteriormente, os controles acima não estavam sendo executados em sistemas de 64 bits. Mas, em setembro de 2017, a Microsoft lançou uma atualização da Biblioteca MSCOMCTL.OCX e o seguinte extrato do Documento da Microsoft é fornecido abaixo para sua informação:
Clique na imagem do documento acima para obter o texto completo do documento 2017 Update:1707. O link a seguir sugere algumas dicas úteis.
  • RESOLVIDO MSCOMCTL.OCX DOWNLOAD REGISTRAR JANELAS DE 64 BITS

Com o uso dos objetos de controle TreeView acima, podemos construir interfaces de usuário com melhor aparência e melhor desempenho para nossos novos projetos.

Baixe o banco de dados de demonstração.