Home Forum Scrivi una domanda di informatica VB2010 e MySQL visualizzazione gerarchica Dati con Treeview

Questo argomento contiene 3 risposte, ha 3 partecipanti, ed è stato aggiornato da  Fabio.Galanti 3 mesi, 1 settimana fa.

Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
  • Autore
    Articoli
  • #60767

    Stuttgart
    Partecipante

    Buongiorno a tutti, mi servirebbe un aiutino su Visual Basic 2010.
    Premetto che le mie conoscenze di programmazione sono piuttosto scarse.

    Dunque ho fatto in MySQL un db con due tabelle (blocchi e progetti) legate tra loro da una terza tabella.

    *progetti *
    **************************
    *idprogetti (primary key)*
    *nome_prog *
    *descrizione *
    **************************

    *blocchi*
    **************************************
    *idblocchi (primary key) *
    *block_name *
    *block_description *
    *progetti_idprogetti (chiave esterna)*
    **************************************

    *Tab_bind*

    ************************************

    *idbind (Primary key)*

    *blocchi_idblocchi (chiave esterna)*

    *progetti_idprogetti (chiave esterna)*

    ***********************************

     

    Per ora ho riempito le tabelle a mano con qualche dato a scopo didattico:

    ************************************

    idprogetti | nome_prog | descrizione |

    1                 | audi              | whatever     |

    2                 |maserati       | whatever     |

    3                 |ferrari           | whatever     |

    **************************************

     

    ******************************************

    idblocchi | block_name | block_description |

    01               | LIN                | lin comunication   |

    02              | CAN               | can comunication  |

    03              | CPU                | processore              |

    04              | FLASH           | memoria                 | 

    ******************************************

     

    **********************************************

    idbind | blocchi_idblocchi | progetti_idprogetti |

    1           |               01                  |           3                      |

    2           |              03                  |           3                      |

    3           |              03                  |           1                      |

    4           |              04                  |           3                     |

    5           |              04                  |           2                     |

    **********************************************

    La relazione che vorrei evidenziare è questa: per ogni blocco molti progetti.

     

    Ora se siete arrivati a leggere fino a qui passiamo al sodo.

    Vorrei fare un funzione in Visual Basic che mi dia una visualizzazione ad albero delle dipendenze seguendo la tabella bind (naturalmente una funzione che aggiorna la lista mano a mano che le tab vengono popolate):

    *********************

    -LIN

        |__Ferrari

    -CPU

       |__Ferrari

       |__Audi

    -FLASH

       |__Ferrari

      |__Maserati

    *******************

     

    Per ora sono arrivato a capire che devo usare un componente in VB che si chiama Treeview e scrivere una funzione ricorsiva. Per il codice nonostante abbia googolato parecchio non sono ancora riuscito a fare molto.

    Il problema e' che non riesco a trovare un esempio pulito di codice dell'uso di VB + Mysql. Anzi magari questo post potrebbe diventare un HOWTO.

    Per ora vi posto il codice per la connessione con il server MySQL in locale. Grazie a chi vorra' aiutarmi.

     

    Imports MySql.Data.MySqlClient 'riferimento al Mysql.Data library (stabilisce la connessione con il db)

    Imports System.Data

    Public Class Form1

    'qui inserisco i dati di connessione al db server

    Public conn As New MySqlConnection(conn.connectionString = "server=127.0.0.1;" _

    & "uid=root;" _

    & "pwd=314272;" _

    & "database=provacollegatabellevb;") 'inserisci qui il nome del db

     

    Private Sub TreeView1_AfterSelect(sender As System.Object, e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect

     

    End Sub

     

    End Class

     

     

    #75739
    Piero Boccadoro
    Piero Boccadoro
    Partecipante

    Intanto complimenti: una domanda così circostanziata mette le persone nelle condizioni di farsi un’idea chiara del problema.
    Io personalmente non ho molta esperienza con MySQL ma qui ci sono una serie di programmatori che potranno certamente darti una mano.
    E se questo post dovesse diventare un HOW-TO sarebbe una gran cosa.
    In bocca al lupo.
    Nel frattempo, cerco di farmi un’idea anche io.

    #75750

    Stuttgart
    Partecipante

    Grazie Piero per l'incoraggiamento,
    pensa che ti ripensa con un po' di esperimenti credo di essere arrivato ad una soluzione.
    Eccovi la prima parte della soluzione.
    Dunque partendo dal database ho creato un query chiamata Treeview. Vi posto qui il codice sql:

    CREATE OR REPLACE VIEW `Treeview` AS
    SELECT
    blocchi.block_name, progetti.nome_prog
    FROM
    (blocchi
    INNER JOIN `bind` ON blocchi.idblocchi = `bind`.blocchi_idblocchi)
    INNER JOIN
    progetti ON `idprogetti` = bind.progetti_idprogetti;

    Il risultato di questa query e' il seguente:
    ***********************************
    block_name | nome_prog

    CPU               | audi
    RAM              | maserati
    LIN                | ferrari
    CPU               | ferrari
    RAM              | ferrari

    ********************************

    Scusate se contenuti della tabella non coincidono con quelli precedenti ma nei vari esperimenti li ho cambiati in corso d' opera. Spero cmq che il significato si capisca.
    Ora che abbiamo le relazioni con i nomi al posto dei numeri possiamo passare in VB per creare l'albero gerarchico.

    #75930

    Fabio.Galanti
    Partecipante

    Per prima cosa, sulla vista che hai fatto, devi ordinare per idblocco e poi per idprogetto, in modo che hai una lista simile alla treeview che vuoi visualizzare.

    Poi fai un ciclo sulla query che estrae sia il blocco che il progetto.

    Prima inizializzi una variabile stringa che ti memorizza il nome del blocco corrente.
    Ad ogni cambio di nome blocco crei un nodo e aggiungi una foglia col nome progetto e aggiorni la variabile col blocco corrente.
    Se non si verifica un cambio del nome del blocco, aggiungi semplicemente la foglia al nodo corrente.

    Non è difficile

Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.