Relazioni tra due datatables. Uso datagrid e datagridview.

di il
1 risposte

Relazioni tra due datatables. Uso datagrid e datagridview.

Buonasera a tutti voi.
Ho due datatables relazionati sul campo "cu"
Ho un form contenente un DATAGRID (da VB6) e un datagridview , che -come noto- ha sostituito ed implementato il datagrid.
Ora ,il punto è questo: il datagrid ha tra le proprietà ALLOWNAVIGATION , che consente la navigazione tra riga padre e righe figlio.
Il datagridview (che non ha la stessa proprietà) ,invece,non mi fa vedere nulla sebbene i diversi tentativi effettuati.
E' evidente che datagridview sia più completo e sofisticato del datagrid, ma non so come gestirlo per avere a disposizione i dati della relazione.
Chiedo aiuto.

Imports System.Data.OleDb
Public Class uffici
    Dim cnn As New OleDbConnection(My.Settings.gianfrancoConnectionString)
    Dim daUffici As New OleDbDataAdapter("select cu,comune from uffici order by comune", cnn)
    Dim daLegali As New OleDbDataAdapter("Select cu,ragsoc1 from legali order by ragsoc1", cnn)
    Dim ds As New DataSet("MyDS")
    Dim dtUffici As New DataTable("uffici")
    Dim dtLegali As New DataTable("legali")
    
    Private Subuffici_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        daUffici.Fill(ds, "uffici")
        daLegali.Fill(ds, "legali")

        dtUffici = ds.Tables(0)
        dtLegali = ds.Tables(1)
        dtUffici.PrimaryKey = New DataColumn() {dtUffici.Columns("cu")}
        'dtLegali.PrimaryKey = New DataColumn() {dtLegali.Columns("cu")}

        'creamo la relazione tra le due tabelle
        Dim padre As DataColumn = ds.Tables("uffici").Columns("cu")
        Dim figlio As DataColumn = ds.Tables("legali").Columns("cu")
        Dim relUffici As DataRelation
        relUffici = New DataRelation("relazione", padre, figlio)

        ' aggiungiamo la relazione al dataset
        ds.Relations.Add(relUffici)
        dg.DataSource = ds      'datagrid

        dgv.DataSource = ds     'datagridview
    End Sub
End Class

1 Risposte

  • Re: Relazioni tra due datatables. Uso datagrid e datagridview.

    Imports System.Data.OleDb
    Public Class Uffici
        Dim cnn As New OleDbConnection(My.Settings.gianfrancoConnectionString)
        Dim daUffici As New OleDbDataAdapter("select cu,comune from uffici order by comune", cnn)
        Dim daLegali As New OleDbDataAdapter("Select cu,ragsoc1 from legali order by ragsoc1", cnn)
        Dim ds As New DataSet("MyDS")
        Dim dtUffici As New DataTable("uffici")
        Dim dtLegali As New DataTable("legali")
    
        'per visualizzare la relazione nelle due datagridview
        Private UfficiBindingSource As New BindingSource()
        Private LegaliBindingSource As New BindingSource()
    
        Private Sub Uffici_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            daUffici.Fill(ds, "uffici")
            daLegali.Fill(ds, "legali")
    
            dtUffici = ds.Tables(0)
            dtLegali = ds.Tables(1)
            dtUffici.PrimaryKey = New DataColumn() {dtUffici.Columns("cu")}
    
            'creamo la relazione tra le due tabelle
            Dim padre As DataColumn = ds.Tables("uffici").Columns("cu")
            Dim figlio As DataColumn = ds.Tables("legali").Columns("cu")
            Dim relUffici As DataRelation
            relUffici = New DataRelation("relazione", padre, figlio)
    
            ' aggiungiamo la relazione al dataset
            ds.Relations.Add(relUffici)
    
            'visualizziamo i dati nel datagrid
            dg.DataSource = ds
    
            'ora visualizziamo la relazione nei due datagridview.A questo fine :
            dgvUffici.DataSource = UfficiBindingSource
            dgvLegali.DataSource = LegaliBindingSource
            GetData()
    
            dgvUffici.AutoResizeColumns()
            dgvLegali.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        End Sub
        
        Private Sub GetData()
            Try
                UfficiBindingSource.DataSource = ds
                UfficiBindingSource.DataMember = "Uffici"
    
                LegaliBindingSource.DataSource = UfficiBindingSource
                LegaliBindingSource.DataMember = "relazione"
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    
    End Class

    Ho risolto…con l'aiuto determinante al 100% dell'MSDN (Creare un modulo Master-Detail usando due controlli DataGridView - Windows Forms .NET Framework | Microsoft Learn).

    Ho pubblicato il codice nell'ipotesi che possa risultare utile a qualcuno.

Devi accedere o registrarti per scrivere nel forum
1 risposte