Home Ritorna

 

Tutorial Access - Controllo Tree View

L'utilizzo del controllo ad albero può essere utile in varie occasioni.
La possibilità di riprodurre graficamente in modo gerarchico un archivio di dati (per esempio una distinta base) garantisce un accesso ai dati abbastanza comodo.

Access mette a disposizione questo controllo che, sebbene pratico e familiare nell'utilizzo, presenta delle oggettive limitazioni che spesso ne hanno decretato l'abbandono (lentezza, limite a circa 1000 items, impossibilità di utilizzare indici numerici, ecc...).

In questo tutorial proviamo ad inserire in un controllo ad albero una semplice distinta base su 2 livelli e proviamo a comprendere come "inserire" i dati necessari. E' evidente che queste poche righe devono servire solo come base di partenza per sviluppi più complessi e non prevede una vera gestione ad infiniti livelli in una distinta base.

Innanzi tutto abbiamo preparato una tabella contenente degli articoli:

Tabella Articoli
Codice Descrizione
F001 Filo 1 mm
F002 Filo 2 mm
F003 Filo 3
F004 Filo 4
F005 Filo 5
M1 Molla Standard
M2 Molla 2
M3 Molla 3
R21 Rivetto 21
V100 Vite 100

 

Successivamente abbiamo preparato una seconda tabella in cui abbiamo inserito la distinta base:

Tabella Articoli_Distinte
ProgrId Padre Figlio Qta
1 M1 F001 10
2 M1 F003 12
3 F002 R21 1
4 F002 V100 0
5 M2 F005 11
6 M3 F002 1
7 M3 F004 10
8 M1 V100 1

Il codice Figlio indica che quello è un componente del codice Padre.
M1 è quindi composto da F001, da F003 e da V100 (chiaramente sono esempi inventati).

 

Caricamento della maschera frmTree
Quando si apre la maschera frmTree viene avviato con l'evento Su caricamento il codice seguente che provvede a lanciare in successione prima la routine che carica il primo livello e poi quella che lancia il secondo (ognuno è libero di sviluppare sistemi diversi, basta aver chiaro come leggere e caricare i dati):

Private Sub Form_Load()
Crea_Root
Crea_Root_2
End Sub

Caricamento del primo livello
La routine da lanciare è riportata sotto.
In pratica sono letti tutti i record della query Articoli_Q1 ed aggiunti nella radice dell'albero. Leggete le note in verde per comprendere il trattamento degli argomenti:

Sub Crea_Root()

Dim objNode As Node
Dim objTree As TreeView
Dim rstArticoli As New ADODB.Recordset
Dim intParentKey As Integer
Dim level As Integer

Set objTree = Me.objTree.Object
objTree.Nodes.Clear

rstArticoli.Open "SELECT * FROM Articoli_Q1", CurrentProject.Connection, adOpenKeyset, adLockBatchOptimistic

Do Until rstArticoli.EOF

' Spiegazioni argomenti per metodo add

 
Set objNode = objTree.Nodes.Add( , , rstArticoli!CodiceArt, rstArticoli!CodiceArt)

' Il primo è mancante perchè è un nodo di radice
' Il secondo è mancante: dovrebbe specificare come un nodo si collega
' Il terzo fornisce una chiave univoca per il nuovo nodo (
non sono ammessi solo numeri).
' Il quarto specifica il testo visualizzato


Set objNode = objTree.Nodes.Add(, , rstArticoli!CodiceArt, rstArticoli!CodiceArt)

rstArticoli.MoveNext

Loop
rstArticoli.Close
End Sub

Caricamento del secondo livello
La routine da lanciare è riportata sotto.
In pratica sono letti tutti i record della query Articoli_Q2 ed aggiunti nel livello successivo dell'albero. Leggete le note in verde per comprendere il trattamento degli argomenti e notate le differenze con la routine precedente:

Sub Crea_Root_2()

Dim objNode As Node
Dim objTree As TreeView
Dim rstArticoli2 As New ADODB.Recordset
Dim Padre As String, Figlio As String, Indice_Figlio As String

Set objTree = Me.objTree.Object


rstArticoli2.Open "SELECT * FROM Articoli_Q2", CurrentProject.Connection, adOpenKeyset, adLockBatchOptimistic

Do Until rstArticoli2.EOF
Padre = rstArticoli2!CodPadre
Figlio = rstArticoli2!CodiceArt
Indice_Figlio = "R" & rstArticoli2!ProgrId
 

' Spiegazioni argomenti per metodo add

 
Set objNode = objTree.Nodes.Add( Padre, tvwChild, Indice_Figlio, Figlio)


' Il primo è il nodo padre
' Il secondo specifica che esiste la relazione con il padre
' Il terzo fornisce una chiave univoca per l'articolo componente (
non sono ammessi solo numeri).
' Il quarto specifica il testo visualizzato

Set objNode = objTree.Nodes.Add(Padre, tvwChild, Indice_Figlio, Figlio)

rstArticoli2.MoveNext

Loop

rstArticoli2.Close

End Sub

Potete ora fare un po' di pratica ed utilizzare il controllo nelle vostre applicazioni.
Potrete per esempio scoprire come utilizzare immagini nel controllo.

Nell'esempio allegato si vede come creare eventi al clic del mouse sui nodi.

 

Scaricate il file per access 2000/XP

 

 

Ritorna