Ese desconocido: ObjectDataSource

¿Qué es el control ObjectDataSource?

Es un control que nos permite acceder a datos de la misma manera en la que nos deja un control como el SqlDataSource, al igual que en este deberemos indicarle los métodos para realizar un Select, Insert, Update y Delete. La diferencia radica en que los controles como SqlDataSource están orientados a arquitecturas de 2 capas, es decir, una interfaz y desde ella acceder directamente a los datos; en cambio el control ObjectDataSource nos permite trabajar con arquitecturas más complejas, además no accede directamente a los datos sino que lo hace a través de un objeto.

ObjectDataSource ObjectDataSource01

Así por ejemplo, le indicaremos al control sobre que clase deberá actuar, llegado el momento de la ejecución de algún método el control instanciará a la clase e invocará al método deseado.

Internamente el control utiliza reflection para poder instanciar la clase (en el caso de que no sea estática) y luego ejecutar el método que le indicamos en la configuración, a continuación le pasará el control al objeto instanciado el cual devolverá, luego de ejecutada la acción, el control al ObjectDataSource. Este control se comporta como cualquier otro de origen de datos, podemos enlazar una Grilla, un Combo, un FormView y cualquier otra cosa que queramos. El control se encuentra disponible sólo para desarrollo Web, es decir, en ASP.NET; es una verdadera lástima que no contemos con algo así de potente en el desarrollo de aplicaciones de escritorio.

Escribiendo un ejemplo de uso Nos propondremos escribir una aplicación Web que será un ABM para una clase genérica, en nuestro caso, una clase que representará a una tabla llamada Personas, la cual se muestra a continuación:

tabla

Public Class Persona

Private _id As Integer

Private _nombre As String

Private _apellido As String

Private _domicilio As String

Private _telefono As String

Public Property Id() As Integer

Get

Return _id

End Get

Set(ByVal value As Integer)

_id = value

End Set

End Property

Public Property Nombre() As String

Get

Return _nombre

End Get

Set(ByVal value As String)

_nombre = value

End Set

End Property

Una vez finalizada la clase Persona, que será la representación de la tabla procederemos a escribir la clase encargada de mapear el contenido a la base de datos y viceversa (como métodos básicos contará con un Insert, Delete, Update, SelectAll y SelectById), sería la capa de acceso a datos y la escribiremos como sigue:

Public Class MapperPersona

Public Sub Insertar(ByVal p As Persona)

End Sub

Public Sub Update(ByVal p As Persona)

End Sub

Por último escribiremos la clase encargada de la lógica de negocio, que en definitiva será la que llame a la clase mapeadora que acabamos de crear:

Public Class ServicioPersona

Public Sub Insert(ByVal p As Persona)

Dim map As New MapperPersona

map.Insertar(p)

map = Nothing

End Sub

Public Sub Update(ByVal p As Persona)

Dim map As New MapperPersona

map.Update(p)

map = Nothing

End Sub

Hemos finalizado así con la creación de una pequeña aplicación de 3 capas, aunque hasta ahora escribimos solo 2, falta la interfaz que es donde intervendrá el control ObjectDataSource.

Creando la interfaz Para ello iremos a la página Default.aspx que es la que se creó por defecto y le cambiaremos el nombre a “TodosPersonas.aspx”, allí arrastraremos un control del tipo GridView y un control del tipo ObjectDataSource. A continuación, haremos clic sobre el control ObjectDataSource, luego clic sobre “Edit Data Source” y finalmente seleccionaremos del combo la clase ServicioPersona tal como se muestra en la imagen que sigue:

odbc

Luego haremos clic en el botón Siguiente y seleccionaremos el método de nuestra clase asociado al método Select del control:

odbcmetodos

Para el Select seleccionaremos la función SelectAll, para el resto de las funciones es muy sencillo, al Update asócienle el método Update de nuestra clase y lo mismo para el resto. El siguiente paso es enlazar la grilla al control, luego de hacerlo editaremos las columnas de la siguiente manera:

columnas

La grilla entonces queda:

grilla

Si en este preciso momento ejecutáramos la aplicación Web veríamos algo como lo que sigue:

muestra

Efectivamente el control funcionó como lo esperábamos, intencionalmente agregue algunos valores a la tabla para poder tener que mostrar en la aplicación.Si no me creen que funcionó entonces pongan un punto de corte sobre la función SelectAll de la clase Persona y verán como al iniciar la página el control llamará a esa función para nutrirse de datos. Lo mismo para el método Edit y Delete:

muestra02

Todo funcionando a la perfección, ahora sólo nos quedaría realizar el Insert; el cual escribiremos a continuación.

Creando la inserción Para este propósito utilizaremos un control llamado DetailsView el cual contendrá las cajas de texto necesarias para insertar los datos y el cual también enlazaremos con nuestro ObjectDataSource. Editaremos los campos de nuestro DetailsView para que quede como muestra el dibujo, es importante no olvidarse de seleccionar la casilla Enable Inserting o Habilitar Inserción:

DetailsView

A cada columna además de asignarle un valor a la propiedad HeaderText también hay que asignarle un valor a la propiedad DataField. Simplemente nos queda probar que el Insert funcione, y de hecho lo hace; pueden probarlo ustedes mismos con el código que adjunté para la nota.

aplicacion.jpg

Antes de terminar… El control ObjectDataSource nos provee de ciertos eventos muy útiles, que se disparan siempre antes y despues de la ejecución de un método: Inserting: se ejecuta antes de llamar al método InsertInserted: se ejecuta luego de llamar al método InsertDeleting: se ejecuta antes de llamar al método DeleteDeleted: se ejecuta luego de llamar al método DeleteSelected: se ejecuta antes de llamar al método SelectSelecting: se ejecuta luego de llamar al método SelectUpdating: se ejecuta antes de llamar al método UpdateUpdated: se ejecuta luego de llamar al método Update Cada vez que se dispara alguno de los eventos mencionados recibiremos como parámetro un tipo llamado ObjectDataSourceMethodEventArgs el cual en su interior nos brindará valiosa información, como por ejemplo el objeto que tuvo que ser llenado para ser enviado como parámetro; de esa manera nosotros podríamos interceptar a ese objeto y cambiarle las propiedades a nuestro antojo. En esta nota Vimos como crear una pequeña aplicación típica de ABM, separada en capas, también vimos como acceder a los datos a través del uso del control ObjectDataSource.

Conclusión El control ObjectDataSource es de lo mejor que nos ofrece .NET, ya que posee una flexibilidad que los otros controles de origen de datos no poseen, tal como interactuar con objetos de nuestra aplicación y así poder mantener una estructura uniforme a lo largo del proyecto.El único punto en contra es que sólo está disponible para aplicaciones Web, una lástima.

Espero que les haya sido de ayuda, sin más me despido.

Fuente: Aqui

Ese desconocido: ObjectDataSource

       En este artículo que encontre la Web veremos un poco acerca de este fantástico control, desconocido por muchos pero que nos brinda muchas posibilidades a la hora de desarrollar aplicaciones.

ObjectDataSourceSqlDataSource01

Para este tipo de artículo se asume que el lector tiene nociones básicas sobre el uso de Visual Studio .NET y además algunas nociones sobre desarrollo Web. Y lo puedes ver AQUI