...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!!

Faccio della mia ignoranza una virtù per stimolare il cervello con soluzioni alternative.
......LELO
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
Ciao,
un'alternativa è mettere in binding l'id del SelectedItem della ListBox 'Nominativi' con RefIDRegistryPerson_BookPersonDetail.

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.