[VB2008] Treeview: come popolarlo da codice in relazione a tabella MyS...

martedì 03 maggio 2011 - 17.25

neo996sps Profilo | Junior Member

Ciao a tutti,

Fin'ora sono riuscito solamente a generare il treeview in maniera statica definendo manualmente i nodi e i vari figli, però non riesco a generarlo dinamicamente.
Questo è il mio codice che ho creato per tentare ma mi genera un errore:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

come faccio a popolare un treeview da codice VB 2008 prelevando i dati da una tabella?
Errare è umano, ma per fare veramente casino ci vuole la password di root

Cteniza Profilo | Guru

Un treeview NON è collegato ai dati quindi la gestione è a prescindere dalla connessione / database.
Per aggiungere un ramo all'albero devi:
definire un nuovo oggetto di tipo treenode (dim nodo As New TreeNode)
Definirne le proprietà
Aggiungerlo alla collection "nodes" del tuo albero (treenode) con il metodo add.
Per aggiungere degli altri rami al tuo ramo, ciascun ramo ha una collection "nodes", ulteriori rami li devi appendere alla collection nodes del treenode
piccolo esempio
dal mio blog
http://community.visual-basic.it/lucianob/articles/17106.aspx
Public Class MainForm
Private Elemento As Integer = 100
Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim k As Integer
'Generazione dati
For k = 1 To 10
Dim dr As DataRow = DsDati.Tables("Prodotti").NewRow()
dr("Codice") = k
dr("Descrizione") = "Prodotto " & k.ToString()
DsDati.Tables("Prodotti").Rows.Add(dr)
'Creazione dati tabella distinta base
For i As Integer = 1 To 2
CreaDatiDiba(k, 0)
Next
Next
'aggiungiamo i prodotti sulla listview
PopolaListView()
End Sub
Sub PopolaListView()
listProdotti.Items.Clear()
For Each dr As DataRow In DsDati.Tables("Prodotti").Rows
Dim it As New ListViewItem
it.SubItems(0).Text = dr("Codice").ToString()
it.SubItems.Add(dr("Descrizione"))
listProdotti.Items.Add(it)
Next
End Sub

Sub CreaDatiDiba(ByVal Padre As Integer, ByVal Livello As Integer)
'poniamo un limite ai livelli possibili
If Livello > 5 Then Exit Sub
Livello += 1
Elemento += 1
Dim dr As DataRow = DsDati.Tables("Diba").NewRow()
dr("Elemento") = Elemento
dr("Padre") = Padre
dr("Descrizione") = Elemento.ToString() & " Padre = " & Padre.ToString()
DsDati.Tables("Diba").Rows.Add(dr)
Padre = Elemento
For i As Integer = 1 To 5
CreaDatiDiba(Padre, Livello)
Next
End Sub

Sub PopolaTreeView(ByVal Padre As Integer, ByVal NodoPadre As TreeNode)
For Each dr As DataRow In DsDati.Tables("Diba").Select("Padre = " & Padre.ToString())
Dim nodo As New TreeNode(dr("Descrizione"))
PopolaTreeView(CType(dr("Elemento"), Integer), nodo)
NodoPadre.Nodes.Add(nodo)
Next
End Sub

Private Sub listProdotti_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles listProdotti.Click
Dim it As ListViewItem = listProdotti.SelectedItems(0)
Dim Padre As Integer = Integer.Parse(it.SubItems(0).Text)
treeDiba.Nodes.Clear()
Dim nodo As New TreeNode(Padre.ToString())
PopolaTreeView(Padre, nodo)
treeDiba.Nodes.Add(nodo)
End Sub

Private Sub treeDiba_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles treeDiba.Click
If Not treeDiba.SelectedNode Is Nothing Then
Dim nodo As TreeNode = treeDiba.SelectedNode
Me.ToolStripStatusLabel1.Text = nodo.Text
If Not nodo.Name Is Nothing Then ToolStripStatusLabel1.Text = nodo.Name
End If
End Sub
End Class
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5