ciao a tutti!
ho creato un win form con 2 griglie in rappresentanza di 2 tabelle relazionate tra loro.
il mio problema è che quando effettuo l'update del dataSet mi viene restituito questo errore:
DataColumn 'DE_GRUPPO' mancante nella DataTable 'TBBLOCCHI' per la SourceColumn 'DE_GRUPPO'.
La cosa strana è che nella mia tabella TBblocchi non ho nessun campo DE_GRUPPO, che invece è presente nella tabella TBgruppi.
definizione delle tabelle:
"TBGRUPPI" (
"COD_GRUPPO" VARCHAR(50) NOT NULL WITH DEFAULT 'codice' ,
"COD_PREVENTIVO" VARCHAR(20) NOT NULL WITH DEFAULT '0' ,
"DE_GRUPPO" VARCHAR(250) ,
"VL_PREZZO" DOUBLE ,
"VL_QUANTITA" INTEGER NOT NULL WITH DEFAULT 1 )
TBBLOCCHI" (
"COD_BLOCCO" VARCHAR(20) NOT NULL WITH DEFAULT '0' ,
"DE_BLOCCO" VARCHAR(255) ,
"COD_GRUPPO" VARCHAR(50) NOT NULL WITH DEFAULT '0' ,
"COD_PREVENTIVO" VARCHAR(50) NOT NULL WITH DEFAULT '0' )
Questo è il mio codice:
// data adapter tabella principale
String sqlSelectGruppi = "SELECT COD_PREVENTIVO,COD_GRUPPO, DE_GRUPPO,VL_PREZZO, VL_QUANTITA "+" FROM TBGRUPPI WHERE COD_PREVENTIVO='" + codPrev + "'";
masterDataAdapter = new OleDbDataAdapter(sqlSelectGruppi, conn
masterDataAdapter.Fill(data, "TBGRUPPI");
// data adapter tabella collegata
string sqlSelectBlocchi = "SELECT COD_PREVENTIVO, COD_GRUPPO,COD_BLOCCO,DE_BLOCCO " + " FROM TBBLOCCHI WHERE COD_PREVENTIVO='" + codPrev + "'";
detailsDataAdapter = new OleDbDataAdapter(sqlSelectBlocchi, conn);
detailsDataAdapter.Fill(data, "TBBLOCCHI");
// definizione relazione, composta da 2 campi
DataRelation relation = new DataRelation("gruppi_blocchi",new System.Data.DataColumn[] { data.Tables["TBGRUPPI"].Columns["COD_PREVENTIVO"],
data.Tables["TBGRUPPI"].Columns["COD_GRUPPO"]},new System.Data.DataColumn[] { data.Tables["TBBLOCCHI"].Columns["COD_PREVENTIVO"], data.Tables["TBBLOCCHI"].Columns["COD_GRUPPO"]});
data.Relations.Add(relation);
// creazione data source per i 2 datagrid
masterBindingSource.DataSource = data;
masterBindingSource.DataMember = "TBGRUPPI";
detailsBindingSource.DataSource = masterBindingSource;
detailsBindingSource.DataMember = "gruppi_blocchi";
gridGruppi.DataSource = masterBindingSource;
gridBlocchi.DataSource = detailsBindingSource;
// nuva riga tabella principale
newRowGruppi = data.Tables["TBGRUPPI"].NewRow();
newRowGruppi["COD_PREVENTIVO"] = this._CodPreventivo;
newRowGruppi["COD_GRUPPO"] = codGruppo;
newRowGruppi["DE_GRUPPO"] = txtDescrGruppo.Text;
newRowGruppi["VL_PREZZO"] = prezzoValue;
newRowGruppi["VL_QUANTITA"] = quantValue;
data.Tables["TBGRUPPI"].Rows.Add(newRowGruppi);
// nuva riga tabella collegata
newRowBlocchi = data.Tables["TBBLOCCHI"].NewRow();
newRowBlocchi["COD_PREVENTIVO"] = this._CodPreventivo;
newRowBlocchi["COD_GRUPPO"] = 'codGruppo';
newRowBlocchi["COD_BLOCCO"] = 'codBlocco';
newRowBlocchi["DE_BLOCCO"] = 'deBlocco';
data.Tables["TBBLOCCHI"].Rows.Add(newRowBlocchi);
masterDataAdapter.Fill(data, "TBGRUPPI");
detailsDataAdapter.Fill(data, "TBBLOCCHI");
// aggiornamento del database
masterDataAdapter.Update(data, "TBGRUPPI");
masterDataAdapter.Update(data, "TBBLOCCHI");
ho copiato il codice che utilizzo, anche se in realtà è suddiviso in diversi eventi.
Avete quelche idea?
grazie