Newsgroup: it.comp.appl.access
Titolo: domanda per uso del TreeView Control

Chiedo scusa se insito con la domanda ma non riesco a venirne fuori.
Dopo aver scaricato dal sito comune l'esempio del "TreeView Control" ed
averlo analizzato volevo sapere come è possibile aggiungere un ulteriore
livello.
sul codice sotto riportato facendo click su di un  record, questo si
"espande" e fa vedere i records correlati, se a loro volta i records
correlati contenessero ulteriori records come si dovrebbe modificare il
codice?
Approffitto innoltre per chiedere sa spiegarmi come attribuire delle icone
ai vari recor.
ringrazio fin d'ora Fabrizio
**************************************************
Private Sub Form_Load()
    Dim objTreeView As Object, objListImage As Object, nodNew As Node
    Dim prg As Control, sbr As Control
    Dim intI As Integer
    Dim rstEmployees As Recordset, rstCustomers As Recordset
    Dim db As Database
    Set objListImage = Me!FileImages
    Set objTreeView = Me!TreeView1
    Set db = CurrentDb
    ' Set TreeView control ImageList property
    objTreeView.ImageList = objListImage.Object
    objTreeView.Sorted = True
    ' Add top level node objects to TreeView control
    Set nodNew = objTreeView.Nodes.Add(, , "Employees", "Employees",
"ManyClosed")
    nodNew.ExpandedImage = "ManyOpen"
    Set nodNew = objTreeView.Nodes.Add(, , "Customers", "Customers",
"ManyClosed")
    nodNew.ExpandedImage = "ManyOpen"
    ' Add Employee Names to Employees Node object
    Set rstEmployees = db.OpenRecordset("SELECT * FROM Employees ORDER BY
LastName;")
    rstEmployees.MoveFirst
    While Not rstEmployees.EOF
        objTreeView.Nodes.Add "Employees", tvwChild, , rstEmployees!LastName
& ", " & rstEmployees!FirstName, "OneClosed", "OneOpen"
        rstEmployees.MoveNext
    Wend
    rstEmployees.Close
    ' Add Customers to Customer Node object
    Set rstCustomers = db.OpenRecordset("SELECT * FROM Customers ORDER BY
CompanyName;")
    rstCustomers.MoveFirst
    While Not rstCustomers.EOF
        objTreeView.Nodes.Add "Customers", tvwChild,
rstCustomers!CustomerID, rstCustomers!CompanyName, "OneClosed", "OneOpen"
        rstCustomers.MoveNext
    Wend
    rstCustomers.Close
    ' Prepare Progress Bar
    Set prg = Me!ProgressBar
    Set sbr = Me!StatusBar
    prg.Left = sbr.Left
    prg.Top = sbr.Top + 30
    prg.Height = sbr.Height - 30
    prg.Width = sbr.Panels(1).Width + 15
    HideSwitchboard
End Sub

 ringrazio fin d'ora Fabrizio
Chiaramente non posso modificare il codice.
Inoltre help e' molto chiaro.
Cerca 'Nodes, insieme' e visualizza 'Metodo Add (insieme Nodes)':
Cmq, crea una form, mettici una Treewiev e una ImageList
chiamali TreeView1 e ImageList1
apri la finestra delle proprieta' del controllo ImageLIst ed inserisci 3 icone
copia il seguente codice nel modulo della form e apri la form
Private Sub Form_Load()
    Dim nodX As Object
    Me.TreeView1.ImageList = Me.ImageList1.Object
    'Primo
    Set nodX = TreeView1.Nodes.Add(, , "R1", "Primo 1", 1, 3)
    Set nodX = TreeView1.Nodes.Add(, , "R2", "Primo 2", 2, 3)
    'Secondo
    '"R1" e' il nodo al quale deve essere agganciato il nuovo nodo
    'tvwChild significa che deve essere figlio di R1
    '"C1" e' la chiave del nodo
    '1 e 3 sono gli indici delle icone che vengono visualizzate
    ' il 3 vien visualizzato quando il nodo viene selezionato
    Set nodX = TreeView1.Nodes.Add("R1", tvwChild, "C1", "Secondo 1", 1, 3)
    Set nodX = TreeView1.Nodes.Add("R1", tvwChild, "C2", "Secondo 2", 1, 3)
    Set nodX = TreeView1.Nodes.Add("R1", tvwChild, "C3", "Secondo 3", 1, 3)
    Set nodX = TreeView1.Nodes.Add("R1", tvwChild, "C4", "Secondo 4", 1, 3)
    Set nodX = TreeView1.Nodes.Add("R2", tvwChild, "D1", "Secondo 1", 2, 3)
    Set nodX = TreeView1.Nodes.Add("R2", tvwChild, "D2", "Secondo 2", 2, 3)
    'Terzo
    Set nodX = TreeView1.Nodes.Add("C2", tvwChild, "E1", "Terzo 1", 2, 3)
    Set nodX = TreeView1.Nodes.Add("C2", tvwChild, "E2", "Terzo 2", 2, 3)
    Set nodX = Nothing
End Sub
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------



Mi pare che il problema si nelle chiavi.
Io utilizzo questo sitema: 4 lettere per identificare il tipo di nodo
e numeri per idenficare il numero del nodo. In questo modo
(utilizzando i contatori del DB) ho sempre chiavi univoche. 
Ad esempio. Se ai nodi employees dai una chiave del tipo "EMPL" &
rstEmployees!IDCont (dove IDCont è la chiave primaria della tabella),
avrai una serie di rami identificabili e gestibili.
Poi ti basta gestire solo i due sottolivelli del nodo corrente.
Cliccando sul nodo Società, ad esempio, (che ha come chiave "root")
scorri il recordset Impiegati e ti crei i nodi "EMPL001", "EMPL002",
ecc. Sullo stesso evento puoi scorrere il recordset fatture (select *
from fatture) che ha un campo IDImpiegato e crearti la struttura ad
hoc:
....
do until .eof
me.tree.nodes.add Key:"FATT" & !IDFattura, Text:=!Data,
Relationship:=tvwchild, Relative:="EMPL" & !IDImpiegato
....
Per applicare una icona diversa ad ogni record devi fornire una chiave
ad ogni immagine della tua ImageList. Dopo di che per ogni record
analizzi il valore che ti interessa. Nel caso delle fatture ad esempio
inserisci nella ImageList due icone una con chiave "FattPagata", e
l'altra con "FattScaduta", poi, mentre scorri il record attribuisci
questo valore ad una variabile string. L'esempio precedente diventa
Dim TipoFattura as String
...
with rstEmployees
do until .eof
if !FatturaPagata = true then
  TipoFattura = "FattPagata"
else
  TipoFattura = "FattScaduta"
end if
me.tree.nodes.add Key:"FATT" & !IDFattura, Text:=!Data,
Relationship:=tvwchild, Relative:="EMPL" & !IDImpiegato,
Image:=TipoFattura
.movenext
end with
OK?

 **************************************************
Di seguito uno studio effettuato tempo fa:
1) tabella: tblCategoria
campi: IDCategoria (contatore) ; Categoria (testo)
2) query: qryCategoria
SELECT tblCategoria.IDCategoria, tblCategoria.Categoria
FROM tblCategoria
ORDER BY tblCategoria.Categoria;
3) tabella: tblProcedura
   campi: IDProcedura (contatore) ; IDCategoria (testo) ; Procedura (testo)
4) query: qryProcedure
 SELECT tblCategoria.Categoria, tblProcedura.Procedura,
tblProcedura.IDProcedura
FROM tblCategoria INNER JOIN tblProcedura ON tblCategoria.Categoria =
tblProcedura.IDCategoria
ORDER BY tblCategoria.Categoria, tblProcedura.Procedura;
5) Maschera: controllo TreeView nome= objTree
      controllo ImageList  nome= ocxImmagine
6) costruisci la seguente sub:
Sub StockTree()
Dim objNode As Object, db As Database, intParentKey As Integer,
intCategoriaKey As Integer
Dim rsCategoria As Recordset, rsProcedura As Recordset
Dim strSQLCategoriaAccess As String, strSQLProceduraAccess As String
Set db = CurrentDb
strSQLProceduraAccess = "SELECT * FROM qryProcedure"
Set rsProcedura = db.OpenRecordset(strSQLProceduraAccess, dbOpenDynaset)
objTree.Nodes.Clear
Set objNode = objTree.Nodes.Add(, , "Magazzino", "Magazzino", 1) 'il numero
1 è l'immagine Index del controllo ImageList
intParentKey = objNode.index
objNode.ExpandedImage = 2
strSQLCategoriaAccess = "SELECT * FROM qryCategoria"
Set rsCategoria = db.OpenRecordset(strSQLCategoriaAccess, dbOpenDynaset)
Do Until rsCategoria.EOF
    Set objNode = Me!objTree.Nodes.Add(intParentKey, tvwChild, "B" &
rsCategoria!IDCategoria, _
    rsCategoria!Categoria, 1)
    intCategoriaKey = objNode.index
    objNode.ExpandedImage = 2
    If Not rsCategoria.EOF Then
        Do While rsProcedura!Categoria = rsCategoria!Categoria
            Set objNode = Me!objTree.Nodes.Add(intCategoriaKey, 4, "C" &
rsProcedura!IDProcedura, _
            rsProcedura!Procedura, 3)
            rsProcedura.MoveNext
            If rsProcedura.EOF Then
                Exit Do
            End If
        Loop
    End If
    rsCategoria.MoveNext
Loop
Set rsCategoria = Nothing
Set rsProcedura = Nothing
End Sub
7) nell'evento Su caricamento della maschera:
Private Sub Form_Load()
Call StockTree
End Sub
giuseppe