Relazione tra due datatables

di il
6 risposte

Relazione tra due datatables

Public Class Form1
Dim tempCC As DataTable
Dim tempOperazioni As DataTable
Dim query As String
Dim ds As DataSet

Private Sub cc2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

ClsCC.connessione()
ds = New DataSet

query = "SELECT ID,cognome, nome, numero_cc FROM cc order by cognome,nome"
tempCC = ClsCC.tabella(query, "cc")
ds.Tables.Add(tempCC)

query = "SELECT id,id_cc,data,tipo_operazione,importo FROM operazioni ORDER BY data DESC"
tempOperazioni = ClsCC.tabella(query, "operazioni")
ds.Tables.Add(tempOperazioni)

'creamo la relazione tra le due tabelle
Dim padre As DataColumn = ds.Tables("cc").Columns("numero_cc")
Dim figlio As DataColumn = ds.Tables("operazioni").Columns("id_cc")
Dim relCorrentisti As DataRelation
relCorrentisti = New DataRelation("RelCorrentisti", padre, figlio)

' aggiungiamo la relazione al dataset
ds.Relations.Add(relCorrentisti)

'Binding
Dim bsCC As New BindingSource
bsCC.DataSource = tempCC

Dim bsOP As New BindingSource
bsOP.DataSource = tempOperazioni

'Textboxes
IDTextBox.DataBindings.Add(New Binding("text", bsOP, "ID"))
Id_ccTextBox.DataBindings.Add(New Binding("text", bsOP, "id_cc"))
Data.DataBindings.Add(New Binding("text", bsOP, "data"))
Tipo_operazioneTextBox.DataBindings.Add(New Binding("text", bsOP, "tipo_operazione"))
ImportoTextBox.DataBindings.Add(New Binding("text", bsOP, "importo"))

'DATAGRID
DGV.DataSource = bsCC

'NAVIGATOR
BindingNavigator1.BindingSource = bsOP
BindingNavigator2.BindingSource = bsCC

End Sub
End Class

Ho un form che contiene un datagridview (che espone un elenco di nominativi) ed una serie di textbox che contengono delle operazioni contabili effettuate dai predetti nominativi. Le due tabelle sono relazionate in un rapporto uno a molti e quindi quando seleziono un nominativo nella DGV, le textbox dovrebbero restituirmi i solo i records della relazione.

Nel mio codice c'è quancosa che non va e sono quindi a richiedere il vostro aiuto, perchè devo affronate simili tematiche anche con altri forms. Grazie.

(con il tanto criticato wizard avrei già risolto, ma voglio resistere e tentare questa modalità programmatica).

6 Risposte

  • Re: Relazione tra due datatables

    Prima cosa, ti conviene usare il tag per il codice altrimenti non si legge bene.
    secondo i wizard secondo me sono la tomba della "logica" semplificano troppo e poi non si capisce perchè magari qualcosa funziona.
    terzo non ho capito ma hai il problema sulla selezione? quindi aggiungerei un where come operatore, oppure hai bisogno che una volta popolato il DGV cliccando nella cella ti ricarica i dati? In quel caso andrei nell'evento CellClick del DGV
  • Re: Relazione tra due datatables

    Selezionata la riga del DGV ("uno" della relazione), le textbox dovrebbero restituirmi solo le righe ("molti" della relazione) dei corrispondenti record (della relazione stessa)
    In pratica, selezionato CAIO nel DGV,il bindingNavigator delle textbox dovrebbe restituirmi 2-3-5 record (e non tutti,come avviene ora).Il wizard -in presenza di una relazione- questa operazione la esegue automaticamente.
    Usando il Cellclick, poi,come estrarre i dati senza ricorrere a filtrare i dati?
    Grazie per qualsiasi suggerimento.
  • Re: Relazione tra due datatables

    E allora filtra il dato che ti occorre no? nel senso, aggiungi un operatore WHERE e dovresti aver risolto giusto?
    Nel cellclick ti fai un select del campo di tuo interesse con Select * latuatabella WHERE tuodato = valorecellacliccata

    in sostanza è questo se ho capito bene
  • Re: Relazione tra due datatables

    Grazie,orione1976. Vedi, quello che sto cercando di fare è quello che -come dicevo prima- il wizard fa automaticamente, che è poi è nulla di più che il risultato di una relazione uno a molti.
    Se applicassi un filtro (tipo : bsOP.Filter = "id_cc=" & DGV.CurrentRow.Cells(3).Value) non avrebbe senso tenere in piedi la relazione. Condividi?
  • Re: Relazione tra due datatables

    Guarda, la relazione uno a molti è proprio la base del mio studio quando ho iniziato con i database, ti faccio un esempio...
    ho un software che gestisce degli interventi in un'officina, spesso la stessa azienda ha più veicoli quindi mi relaziono in questo modo:
    Associo all'ID dell'azienda, l'ID della vettura.... inserito il dato nella tabella della vettura, quando faccio una ricerca applico il WHERE all'ID dell'azienda e quindi mi restituisce TUTTE le vetture della singola Azienda... questo è uno a molti direi...
    quindi se il software che usi non è già operativo, gestirei le connessioni manualmente e applicherei questa soluzione perchè ti rimane molto più comoda quando fai le modifiche, quando usi il wizard per esempio, se dopo devi modificare il database con più o meno voci, vedrai che avrai problemi.
  • Re: Relazione tra due datatables

    Grazie,orione1976.Mi fido della tua esperienza e seguirò il tuo consiglio.
Devi accedere o registrarti per scrivere nel forum
6 risposte