[C#] Aggiornamento gerarchico.

lunedì 09 novembre 2009 - 17.12

blufix79 Profilo | Newbie

Salve ragazzi.

Ho da poco iniziato a studiare C# e sono ancora agli inizi.

Sto cercando di capire come funziona l'aggiornamento gerarchico mediante il componente TabelAdapterManager, ma ho trovato delle difficoltà. Nel mio database ho due tabelle correlate con una relazione uno a molti quindi di tipo "padre" -> "figlio".

Su un Form ho trascinato i nodi del dataset di entrambe le tabelle, dallo stesso nodo gerarchico, la tabella padre in formato dettagli e la tabella figlio in formato dataGrid.

Se modifico un record esistente sulla tabella figlio e clicco sul pulsante save della bindingNavigator non ho nessun problema, ma quando voglio aggiungere un nuovo record padre e contemporaneamente dei record figli, non ottengo il risultato sperato.

Allora ho seguito questa procedura su msdn: Aggiornamento gerarchico - http://msdn.microsoft.com/it-it/library/bb384432.aspx

Quindi ho aggiunto le righe di codice necessarie indicate dalla procedura ma il problema si presenta sempre.

Io ho risolto in questo modo: aggiungendo all'evento AddingNew del bindigSource della tabella figlio oltre al padreBindingSource.EndEdit() anche padreTableAdapter.Update().

Visto questo volevo chiedervi se esiste un modo più raffinato per ottenere lo stesso.

P.S. La procedura in msdn funziona correttamente con il database d'esempio NorthWind perche la chiave primaria della tabella customers non è autoincrementante, e qundi devi inserire manualmente l'id. Nel mio caso la chiave primaria è autoincrementante.

Grazie a tutti in anticipo per la disponibilità!

EDIT:
ho fatto delle prove sia con MySql che con Sql Server. Dicevo di aver risolto ma in effetti mi accorgo che il tutto funziona solo su Sql Server, su MySql no. Vi posto il codice:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void protocollo_corrispondenzaBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
this.Validate();
this.protocollo_corrispondenzaBindingSource.EndEdit();
this.allegatiBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.gestione_edileDataSet);

}

private void Form1_Load(object sender, EventArgs e)
{
// TODO: questa riga di codice carica i dati nella tabella 'gestione_edileDataSet.allegati'. È possibile spostarla o rimuoverla se necessario.
this.allegatiTableAdapter.Fill(this.gestione_edileDataSet.allegati);
// TODO: questa riga di codice carica i dati nella tabella 'gestione_edileDataSet.protocollo_corrispondenza'. È possibile spostarla o rimuoverla se necessario.
this.protocollo_corrispondenzaTableAdapter.Fill(this.gestione_edileDataSet.protocollo_corrispondenza);

}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Program.mainForm.frmForm1Attivo = null;
}

private void allegatiBindingSource_AddingNew(object sender, AddingNewEventArgs e)
{
this.protocollo_corrispondenzaBindingSource.EndEdit();
this.protocollo_corrispondenzaTableAdapter.Update(gestione_edileDataSet.protocollo_corrispondenza);
}
}

la tabella padre è "prorocollo_corrispondenza" e "allegati" quella correlata.
Io procedo in questo senso, premendo il pulsante sul bindingNavigator per aggiungere un nuovo record, sul controllo agganciato al capo id_protocollo appare un -1, quando clicco sulla riga della dataGrid, viene esguito l'evento addingNew. Utilizzando SqlServer viene subito resituito l'id della riga assegnato e quindi associato alla chiave esterna della tabella allegati, infatti questo appare subito sulla nuova riga della dataGrid. Utilizzando Mysql, questo non accade, sull'id_protocollo rimane quel -1 che viene associato alla chiave esterna della tabella allegati.

Qualcuno conosce il motivo?
Grazie.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5