DataGridView collegati

di il
11 risposte

DataGridView collegati

Salve a tutti e buona domenica, ho questo problema

Ho una tabella MySql collegata con una tabella secondaria con un indice con rapporto “uno a molti”.

Dovrei caricare nella dgw1 la tabella principale e nella dgw2 solo i campi abbinati alla linea selezionate nella dgw1.

Ogni volta che le seziono un valore diverso nella dgw1 si dovrebbe aggiornare la dgw2 con quelli abbinati al nuovo elemento.

Il programma mi legge la dgw1 e passa l'indice della line selezionata alla funzione che mi carica nella seconda i valori giusti ma quando cambio linea nella dgv1 non mi effettua aggiornamenti.

Qualche suggerimento? Grazie 1000 in anticipo.

11 Risposte

  • Re: DataGridView collegati

    Mostra il codice.

  • Re: DataGridView collegati

    Ecco il codice, ho tolto la funzione perchè non andava.

    Imports MySql.Data.MySqlClient
    
    
    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
    
            Dim Mserver = "localhost"
            Dim Mport = 3306
            Dim Musername = "root"
            Dim Mpassword = "password"
            Dim Mdatabase = "tabelle"
    
    
            Dim conn As New MySqlConnection("server=" & Mserver & ";port='" & Mport & "';username='" & Musername & "';Password='" & Mpassword & "';database='" & Mdatabase & "';")
            conn.Open()
    
            Dim da As New MySqlDataAdapter("Select id_uno, gruppo from uno", conn)
            Dim dt As New DataTable
            da.Fill(dt)
    
            DataGridView1.DataSource = dt
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    
            Dim id = DataGridView1.CurrentRow.Cells(0).Value().ToString
    
            Dim d2 As New MySqlDataAdapter("Select sottogruppo from due where " & id & " = id_due ", conn)
            Dim dt2 As New DataTable
            d2.Fill(dt2)
    
            DataGridView2.DataSource = dt2
    
    
        End Sub
        
    End Class
    
  • Re: DataGridView collegati

    Avevi detto che il codice della funzione andava bene, almeno la prima volta. Perché non la mostri?

    E dov'è il codice dell'evento Click della riga della griglia?

  • Re: DataGridView collegati

    Scusate la versione aggiornata era su un altro pc, il fatto di passare il parametro con una funzione l'ho cancellato non andava, però ho provato con un evento click per vedere se cambiava qualcosa. Qual' è l'evento abbinato alla selezione riga? E devo dare un refresh per aggiornare le dgw? Credo che anzichè "CurrentRow.Cells(0)" che mi riporta sempre al primo" id" debba sostituirla con la cella selezionata di volta in volta.

    
    Imports MySql.Data.MySqlClient
    
    
    Public Class Form1
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
    
    
    
            Dim conn As New MySqlConnection("server= localhost;username='root';Password='root01*';database='tabelle';")
    
            conn.Open()
    
            Dim da As New MySqlDataAdapter("Select id_uno, gruppo from uno", conn)
            Dim dt As New DataTable
            da.Fill(dt)
    
            DataGridView1.DataSource = dt
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    
            Dim id = DataGridView1.CurrentRow.Cells(0).Value().ToString
    
            Dim d2 As New MySqlDataAdapter("Select sottogruppo from due where " & id & " = id_due ", conn)
            Dim dt2 As New DataTable
            d2.Fill(dt2)
    
            DataGridView2.DataSource = dt2
    
    
        End Sub
    
        Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick
            MsgBox("click")
            Dim conn As New MySqlConnection("server= localhost;username='root';Password='root01*';database='tabelle';")
            conn.Open()
    
            Dim da As New MySqlDataAdapter("Select id_uno, gruppo from uno", conn)
            Dim dt As New DataTable
            da.Fill(dt)
    
            DataGridView1.DataSource = dt
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    
            Dim id = DataGridView1.CurrentRow.Cells(0).Value().ToString
    
            Dim d2 As New MySqlDataAdapter("Select sottogruppo from due where " & id & " = id_due ", conn)
            Dim dt2 As New DataTable
            d2.Fill(dt2)
    
            DataGridView2.DataSource = dt2
        End Sub
    End Class
    
    
  • Re: DataGridView collegati

    Intanto devi usare la stessa connessione che va aperta all'inizio e non negli eventi.

    Poi se l'id collegato è in colonna 0 allora va bene ma perché scrivi la WHERE al contrario?

    where id_due = " & id 
  • Re: DataGridView collegati

    Come ti ha già detto Oregon, la connessione la devi definire a livello di form e poi la apri una volta sola e continui ad usare quella.

    Ma soprattutto……

    tu nella Sub Button1_Click popoli la datagrid1 e anche la datagrid2, e fin qui va bene, 
    ma quando ti sposti di cella e quindi scateni l'evento CellContentClick, perchè ripopoli di nuovo la datagrid1 ??
    Ovvio che non ti funziona, perchè poi la CurrentRow è sempre la prima riga, non si sposterà mai sulle altre righe.

    Dentro all'evento CellContentClick devi recuperare l'id dalla Cells(0) della CurrentRow e ripopolare solamente la datagrid2

    Quando tutto funziona……
    dovresti anche tener traccia dell'ID della riga che stai visualizzando, perchè l'evento CellContentClick viene chiamato ad ogni cambiamento di cella, ma se stai muovendo il cursore su un'altra cella della stessa riga, non serve che l'evento CellContentClick ripopoli la datagrid2, visto che non hai cambiato riga ma solo colonna

  • Re: DataGridView collegati

    Grazie farò delle prove anche se la vedo dura

  • Re: DataGridView collegati

    Ma no, non demoralizzarti, modifiche da fare al tuo codice non ce ne sono molte, poi comunque ti aiutiamo, fai un passettino alla volta e mostraci come modifichi il codice, e poi ti diciamo dove sbagli.
    Qui sul forum non diamo la pappa pronta, ma ti aiutiamo finchè ne hai bisogno

  • Re: DataGridView collegati

    Riuscito 

    
    Imports MySql.Data.MySqlClient
    
    
    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        End Sub
    
    
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim conn As New MySqlConnection("server= localhost;username='root';Password='root01*';database='tabelle';")
    
            conn.Open()
    
            Dim da As New MySqlDataAdapter("Select id_uno, gruppo from uno", conn)
            Dim dt As New DataTable
            da.Fill(dt)
    
            DataGridView1.DataSource = dt
            DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
    
    
            Dim id_riga = DataGridView1.CurrentRow.Cells(0).Value().ToString
            Dim d2 As New MySqlDataAdapter("Select sottogruppo from due where " & id_riga & " = id_due ", conn)
            Dim dt2 As New DataTable
            d2.Fill(dt2)
    
            DataGridView2.DataSource = dt2
    
    
        End Sub
    
    
        Private Sub dataGridView1_CellMouseClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseClick
            Dim row As DataGridViewRow = DataGridView1.Rows(e.RowIndex)
    
            Dim id = row.Cells(0).Value.ToString
    
    
            Dim conn As New MySqlConnection("server= localhost;username='root';Password='root01*';database='tabelle';")
            conn.Open()
    
    
            Dim d2 As New MySqlDataAdapter("Select sottogruppo from due where " & id & " = id_due ", conn)
            Dim dt2 As New DataTable
            d2.Fill(dt2)
    
            DataGridView2.DataSource = dt2
            DataGridView2.Refresh()
        End Sub
    End Class
    

    Sistemerò “MySqlConnection” cmq per ora fa quello che mi serve. 

    Grazie ancora 1000 a tutti.

  • Re: DataGridView collegati

    Devi usare un solo oggetto conn o avra molti problemi in seguito  

  • Re: DataGridView collegati

    Dovresti ripopolare la seconda DGV solo se cambia la riga selezionata nella prima DGV. Quindi è più indicato l'evento SelectionChange anziché CellMouseClick.

Devi accedere o registrarti per scrivere nel forum
11 risposte