El nuevo control ObjectDataSource es muy útil a la hora de enlazar una rejilla u otro control de ASP.NET 2.0 con un objeto de negocio, como por ejemplo un Servicio Web o un objeto propio.
Los métodos de selección, inserción, actualización o borrado de registros pueden tener parámetros que es necesario ajustar. Por ejemplo en la siguiente figura el método de selección dispone de un paráemtro "Pais" que es necesario ajustar para poder obtener los datos:
El propio diálogo de configuración nos ofrece la posibilidad de asociarle a cada uno de los parámetros, aparte de un control por defecto, algún origen que sirva para asignarlo (una cookie,uncontrol, etc...):
Aunque esto llega en la mayor parte de los casos y es muy cómodo, puede darse el caso de que necesitemos cambiar nosotros dinámicamente el valor de un parámetro usando cualquier código de cosecha propia.
Lo primero que cabe pensar es acudir a la propiedad SelectParameters del control ObjectDataSource, y escribir algo así:
ObjectDataSource1.SelectParameters(
"Pais").Value = "Spain"
Por desgracia esto no funciona. Los parámetros del control no se pueden establecer desde esta colección, por lo que este código generará un error.
La forma de conseguirlo es mucho más rebuscada: Hay que gestionar los eventos de selección, actualziación, borrado o inserción y hacer el cambio en ellos a través de los parámetros que envían.
Por ejemplo, para cambiar el parámetro de selección de nuestro ejemplo debemos usar el siguiente código (sin que sirva de precedente en VB.NET):
Protected Sub ObjectDataSource1_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs) Handles ObjectDataSource1.Selecting
e.InputParameters(
"Pais") = "Spain"
End Sub
La verdad es que me pafece un tanto rebuscado y, aunque es muy fácil escribir este código, considero que más fácil sería permitirlo desde las correspondientes propiedades, forzando si quieres el re-enlace del control. Pero bueno...