...nell'Oggetto della mia domanda ho inserito tra le parole chiave più usate da me per trovare risposta al mio problema....ma nulla.
Ho una pagina con un ListBox, popolata da Nominativi, poi un DataForm di dettagli (contatti, telefono,fax, mail, etcc....).
I due controlli in questione sono gestiti da due tabelle dello stesso DB, in relazione da un campo:
ID_RegisterPerson della tabella '
Nominativi'
e
RefIDRegistryPerson_BookPersonDetail[i] della tabella 'Dettagli'.
Il tutto è gestito da un MVVM!!!
In 'Lettura' tutto ok: cioè selezionando un nominativo il DataForm viene popolato dai dettagli del Nominativo selezionato, appunto.
Il problema è quando voglio inserire un nuovo Dettaglio del Nominativo selezionato. Sto utilizzando le risorse del Dataform "CommandButtons": Edit, Add, Delete, Commit, Cancel per praticità di spazio.
Il problema in inserimento è che dopo aver compilato i campi e cliccato su OK, quando poi avvio il salvataggio dei dati attraverso la 'RelayCommand' ([i]Context.SubmitChanges...) viene visualizatta un'eccezione "Submit operation failed" sulla tabella '
Nominativi'.
In pratica non avviene la relazione tra ID '
Nominativi' e '
Dettagli'.
Ho provato, e mi sono reso conto però che se intercetto il valore del campo '
RefIDRegistryPerson_BookPersonDetail' nell'evento "DataFormAddingNewItemEventArgs" mi indica l'ID corretto.
Mi sono inventato quindi questa FORZATURA:
durante l'evento "DataFormAddingNewItemEventArgs" associo ad una variabile privata il valore del '
RefIDRegistryPerson_BookPersonDetail' e nell'evento DataFormEditEndingEventArgs gli riassegno il valore, contenuta nella variabile.
In questo modo funziona, ma mi sa di forzatura....qualcosa mi scappa e non capisco cosa.
ecco i codici:
private void ContactDetail_DataForm_AddingNewItem(object sender, DataFormAddingNewItemEventArgs e)
{
RegisterPersons_BookDetails details = ((DataForm)sender).CurrentItem as RegisterPersons_BookDetails;
_RefID = details.RefIDRegistryPerson_BookPersonDetail;
}
private void ContactDetail_DataForm_EditEnding(object sender, DataFormEditEndingEventArgs e)
{
switch (this.ContactDetail_DataForm.Mode)
{
case DataFormMode.AddNew:
EditEnding_AddNew(sender);
break;
case DataFormMode.Edit:
EditEnding_Edit(sender);
break;
case DataFormMode.ReadOnly:
break;
}
}
private void EditEnding_AddNew(object sender)
{
RegisterPersons_BookDetails details = ((DataForm)sender).CurrentItem as RegisterPersons_BookDetails;
details.DateInsert_BookPersonDetail = DateTime.Today;
details.RefIDRegistryPerson_BookPersonDetail = _RefID;
}
Mi sapreste aiutare, anche dandomi del somaro....sono neofita!!