Pregunta

Estoy usando un FormView con un ObjectDataSource. Cuando se hace clic en el botón Guardar, me gustaría modificar el objeto vinculado a los datos antes de que se configure en el método de actualización ObjectDataSources.

Probé el evento de actualización de FormView, así como el evento de actualización de la fuente de datos del objeto, pero no puedo entender cómo acceder al objeto vinculado a los datos. FormView.DataItem es nulo en esos eventos.

O, en otras palabras, me gustaría interceptar y modificar el DataItem antes de que pase al ObjectDataSource UpdateMethod.

Para dar un poco más de detalle sobre por qué quiero hacer esto, hay algunos valores en el formulario que no pueden vincularse a los datos con la funcionalidad integrada. Uno de los controles es la lista de casillas de verificación. Estoy usando el evento DataBinding para completar las comprobaciones, pero ahora también necesito una forma de actualizar mi objeto para reflejar los valores del formulario. También hay otros controles con situaciones similares.

¿Fue útil?

Solución

¿Por qué no escribe su propio objeto comercial (también conocido como ObjectDataSource) y ajusta el objeto ObjectDataSource original? Luego puede interceptar lo que desee y modificarlo en ruta al método Save del objeto ObjectDataSource original.

Otros consejos

Sé que esta es una vieja pregunta, pero tuve el mismo problema y encontré la respuesta que creo que Bob está buscando.

La solución es utilizar el evento de actualización ObjectDataSource en el formulario web. El evento de actualización incluye el objeto ObjectDataSourceMethodEventArgs como parámetro. La clase ObjectDataSourceMethodEventArgs incluye un nombre apropiado '' InputParameters '', y puede usarlo para acceder al objeto de datos y modificar el contenido antes de que ocurra la actualización. Primero debe convertir el objeto InputParameters a un tipo OrderedDictionary (el espacio de nombres completo es System.Collections.Specialized.OrderedDictionary)

Se parece a esto:

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 solo está disponible cuando DataBinding.
Los datos se vinculan a los controles dentro de su FormView.
Use myFormView.FindControl (id. De cadena) para acceder a los valores enlazados antes de actualizar.

Si el enlace de datos bidireccional no funciona para usted, debe instanciar su objeto, rellenar manualmente las propiedades y luego actualizar o confirmar los cambios.

Dado que está en el evento Actualización, FormView.DataItem es nulo porque aún no se ha producido el enlace de datos. Debe acceder a los datos a través del control de formulario que contiene sus datos de interés.

Intente aplicar su modificación de datos durante el evento OnDataBinding del control relevante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top