Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Vb.net] Aiuto nella creazione di una ricorsione

    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.

    codice:
    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
    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.

  2. #2
    io avrei fatto 3 tabelle in relazione tra di loro. In questo modo sarebbe stato molto più semplice creare i vari nodi.
    Avrei fatto un ciclo sulla tabella padre e avrei cercato gli eventuali figli e via di scorrendo...

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    116
    Dunque dunque,
    te lo scrivo in pseudo codice:


    Funzione Alberizza(int idPadre) {

    -For Each riga nel dataGrid {
    --Se idCategoria = idPadre {
    ---Aggiungi nodo
    ---(stampa qualcosa se vuoi)
    ---Alberizza(idCategoria)
    --} //chiuso if
    -} // chiuso Foreach

    }


    E poi da qualche parte chiamerai

    Alberizza(0) che inizia da tutti i nodi di livello 0

  4. #4

  5. #5
    Originariamente inviato da VBNET79
    io avrei fatto 3 tabelle in relazione tra di loro. In questo modo sarebbe stato molto più semplice creare i vari nodi.
    Avrei fatto un ciclo sulla tabella padre e avrei cercato gli eventuali figli e via di scorrendo...
    Procedere così mi avrebbe limitato nei livelli... se ad esempio devo inserire un altra categoria sotto 1.3 multijet (tipo 3 o 5 porte) avrei dovuto creare ancora un altra tabella... per un numero indefinito di livelli è indispesabile la ricorsione... credo...

  6. #6
    Ho risolto in questo modo:
    codice:
        Private Sub ApplicazioniTreeNode2(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
                    ApplicazioniTreeNode2(CInt(nodo.Tag), nodo)
                End If
            Next
        End Sub

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.