[Vb.net] Aiuto nella creazione di una ricorsione

lunedì 15 novembre 2010 - 23.17

seven.7 Profilo | Junior Member

Buonasera a tutti,
ho un problema nella creazione di un ricorsione con treeview/treenode. Sicuramente sarà qualche riga di codice ma ci stò perdendo la testa... sarà la stanchezza forse ma stasera non connetto proprio :) Ad ogni modo ho un database mysql con una tabella contenente questi dati :

ID categoria ; ID_padre ; Nome
1 ; 0 ; Fiat
2; 0 ; Lancia
3; 1 ; Punto
4; 3 ; 1.3 Multijet

e così via...

A questo punto il risultato che vorrei visualizzare nel treeview

* Fiat
** Punto
***1.3 Multijet
* Lancia

Ho scritto questo codice ma mi fermo al 2° livello (punto)... 1.3 Multijet viene riportante sempre sotto Fiat e non sotto Punto.

[CODE]Private Sub ApplicazioniTreeNode(Optional ByVal idpadre As Integer = 0) For Each dr As DataGridViewRow In Me.DataGridView1.Rows If dr.Cells("id_padre").Value = idpadre Then Dim nodo As New TreeNode nodo.Tag = dr.Cells("id").Value nodo.Text = dr.Cells("nome").Value ' If dr.Cells("id_padre").Value = 0 Then Me.TreeView1.Nodes.Add(nodo.Tag, nodo.Text) Else Dim index As Integer = RecuperaNodo(idpadre) Me.TreeView1.Nodes(index).Nodes.Add(nodo.Tag, nodo.Text) End If ApplicazioniTreeNode(nodo.Tag) End If Next End Sub[/CODE]

Vorrei anche conservare sempre l'id del record nel treeview ma per questo penso che posso risolvere creando una classe da aggiungere come oggetto nel tag del treenode.

In ogni caso grazie mille.

AntCiar Profilo | Expert

ciao.
Cambia la tua SUB con questa. Visto che usi la ricorsione è inutile usare un'altra funzione per determinare il padre. Il nodo padre è quello che stai ciclando....

Private Sub ApplicazioniTreeNode(Optional ByVal idpadre As Integer = 0, Optional ByVal ParentNode As TreeNode = Nothing)
For Each dr As DataGridViewRow In Me.DataGridView1.Rows
If dr.Cells("id_padre").Value = idpadre Then
Dim nodo As TreeNode = New TreeNode
nodo.Tag = dr.Cells("id").Value
nodo.Text = dr.Cells("nome").Value

If ParentNode Is Nothing Then
Me.TreeView1.Nodes.Add(nodo)
Else
ParentNode.Nodes.Add(nodo)
End If

ApplicazioniTreeNode(CInt(nodo.Tag), nodo)
End If
Next
End Sub

Cristian Barca
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5