Domanda

Sto usando un FormView con un ObjectDataSource. Quando si fa clic sul pulsante Salva, vorrei modificare l'oggetto associato ai dati prima che venga impostato sul metodo di aggiornamento ObjectDataSources.

Ho provato l'evento di aggiornamento di FormView e l'evento di aggiornamento dell'origine dati oggetto ma non riesco a capire come accedere all'oggetto associato ai dati. FormView.DataItem è nullo in quegli eventi.

O in altre parole, vorrei intercettare e modificare DataItem prima che venga passato a ObjectDataSource UpdateMethod.

Per dare un po 'più di dettagli sul motivo per cui voglio farlo, ci sono alcuni valori nel modulo che non possono essere integrati nel database con la funzionalità build in. Uno dei controlli è l'elenco delle caselle di controllo. Sto usando l'evento DataBinding per popolare i controlli, ma ora ho anche bisogno di un modo per aggiornare il mio oggetto per riflettere i valori del modulo. Esistono anche altri controlli con situazioni simili.

È stato utile?

Soluzione

Perché non scrivi semplicemente il tuo oggetto business (aka ObjectDataSource) e avvolgi l'oggetto ObjectDataSource originale? È quindi possibile intercettare tutto ciò che si desidera e modificarlo in rotta verso il metodo Save dell'oggetto ObjectDataSource originale.

Altri suggerimenti

So che questa è una vecchia domanda, ma ho avuto lo stesso problema e ho trovato la risposta che penso Bob stia cercando.

La soluzione è utilizzare l'evento di aggiornamento ObjectDataSource sul Web Form. L'evento di aggiornamento include l'oggetto ObjectDataSourceMethodEventArgs come parametro. La classe ObjectDataSourceMethodEventArgs include un nome proprio "InputParameters", e puoi usarlo per accedere all'oggetto dati e modificare il contenuto prima che si verifichi l'aggiornamento. Devi prima convertire l'oggetto InputParameters in un tipo OrderedDictionary (lo spazio dei nomi completo è System.Collections.Specialized.OrderedDictionary)

Sembra qualcosa del genere:

protected void myObjectDataSource_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
    OrderedDictionary parameters = (OrderedDictionary)e.InputParameters;
    MyDataObject updatedData = (MyDataObject)parameters[0];
    DropDownList myDropDown = (DropDownList)FormView1.FindControl("myDropDown")
    updatedData.SomeDataValue = myDropDown.SelectedValue;
}

DataItem è disponibile solo quando DataBinding.
I dati vengono quindi associati ai controlli all'interno di FormView.
Utilizzare myFormView.FindControl (ID stringa) per accedere ai valori associati prima dell'aggiornamento.

Se la banca dati bidirezionale non funziona per te, è necessario instanciare l'oggetto, popolare manualmente le proprietà e quindi aggiornare o eseguire il commit delle modifiche.

Dato che sei nell'evento di aggiornamento, FormView.DataItem è nullo perché non è ancora avvenuta l'associazione dei dati. Devi accedere ai dati tramite il controllo del modulo contenente i tuoi dati di interesse.

Prova ad applicare la modifica dei dati durante l'evento OnDataBinding del controllo pertinente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top