Está en la página 1de 27

23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .

NET

LINQ to SQL (5 Parte) Enlazar controles de interfaz de


usuario con el ASP:LinqDatSource
En las ltimas semanas he escrito una serie de post sobre LINQ to SQL. LINQ to SQL es un O/RM que viene con la
versin 3.5 del framework .NET, y nos permite modelar bases de datos relacionales con clases de .NET. Podemos usar
expresiones LINQ para consultar la base de datos, as como actualizar, insertar y borrar datos.

Aqu tenis los links a los post anteriores:

Parte 1: Introduccin a LINQ to SQL


Parte 2: De niendo el modelo de datos.
Parte 3: Consultando la base de datos
Parte 4: Actualizando la base de datos.

En estos post hemos visto cmo podemos usar LINQ to SQL programticamente para consultar y actualizar nuestra
base de datos.

En el post de hoy veremos el nuevo control <asp:LinqDataSource> de la nueva versin del .NET Framework (3.5). Este
control es una nueva fuente de datos para ASP.NET (como los controles ObjectDataSource y SQLDataSource de
ASP.NET 2.0) que nos va a permitir enlazar controles de la interfaz de usuario a nuestro modelo de datos LINQ to SQL.

Aplicacin de ejemplo que construiremos.

El ejemplo que veremos se trata de una aplicacin muy simple que nos va a permitir editar los datos de la tabla
products:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 1/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

La aplicacin le da al usuario las siguientes opciones de gestin:

1. Filtrado de productos por categoras.


2. Ordenar los productos haciendo clic en la cabecera de las columnas (Nombre, Precio, unidades en stock, etc)
3. Navegar en por los productos de 10 en 10.
4. Edicin de los detalles de cualquier producto.
5. Borrar productos de la lista.

La aplicacin web la implementaremos con un modelo de datos muy limpio creado con el ORM LINQ to SQL.

Todas las reglas de negocio y las validaciones lgicas se implementarn en el la capa de datos - y no en la capa de
presentacin ni en ninguna pgina web. Con esto conseguiremos: 1) Un conjunto consistente de reglas de negocio
que sern usadas en toda la aplicacin, 2) escribiremos menos cdigo y mejor an, no lo repetiremos y 3) podremos
cambiar las reglas de negocio cuando queramos sin tener que actualizar ese cdigo en miles de sitios en toda la
aplicacin.

Tambin aprovecharemos el soporte de paginado y ordenacin de LINQ to SQL para asegurarnos que tales
operaciones no se realizan en la capa intermedia, sino en la base de datos (es decir, slo obtendremos 10 productos
de la base de datos en cada momento - no estamos obteniendo miles de las y ordenndolas/paginndolas en el
servidor web).

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 2/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Qu es el control <asp:LinqDataSource> y cmo nos ayuda?

El control <asp:LinqDataSource> es un control de ASP.NET que implementa el patrn DataSourceControlque se


introdujo con ASP.NET 2.0. Es similar a los controles ObjectDataSource y SqlDataSource en quepuede enlazar un
control ASP.NET en una pgina con la base de datos. La diferencia es que en lugar de enlazar directamente con la
base de datos (como el SqlDataSource) o a una clase genrica (como el ObjectDataSource), este control est diseado
para enlazar aun modelo de datos con LINQ.

Una de las ventajas de usar este control es que nivela la exibilidad de los ORMs basados en LINQ. No tenemos que
de nir mtodos para insercin/consulta/actualizacin y borrado para el datasource - sino que aadimos ste control
a nuestro modelo de datos, de nimos con qu entidades queremos que trabaje, y enlazamos cualquier control de
ASP.NET para que trabaje con l.

Por ejemplo, para tener un listado bsico de los productos que use las entidades Product con un modelo de datos
LINQ to SQL, slo tenemos que declarar un control <asp:linqdatasource> en nuestra pgina que enlaze a la clase
datacontext de nuestro LINQ to SQL, identi car las entidades (por ejemplo: Products). Y ya podemos enlazar un
GridView con l (modi cando su propiedad DataSourceID) para obtener un grid como el siguiente:

Sin tener que hacer nada ms, podemos ejecutar la pgina y tener un listado de los productos con paginado y
ordenacin. Podemos aadir los botones edit y deleteen el grid y tener soporte automtico para ello. No tenemos
que aadir ningn mtodo, mapear ningn parmetro, ni escribir ningn cdigo para el control
<asp:LinqDataSource> para tener todas estas operaciones. Cuando se hacen actualizaciones, el ORM se asegurar de
que todas las reglas de negocio y de validacin que hemos aadido se cumplan ntes de guardar los datos.

Importante: La belleza de LINQ y LINQ to SQL es que obviamente no slo sirven para escenarios como el anterior -
o para casos particulares paraenlazarcontrolesde interfaces de usuario como con el LinqDataSource. Como ya
hemos visto en los post anteriores, escribir cdigo con este ORM es muy limpio. Siempre podemos escribir cdigo
personalizado para nuestras interfaces de usuario que trabajen directamente con el modelo de LINQ to SQL si
queremos o cuando nos encontremos en un escenario en el que no se pueda usar <asp:linqdatasource>

En los siguientes pasos veremos como montar la aplicacin que hemos descrito usando LINQ to SQL y el control
<asp:LinqDataSource>

Paso 1: De nir nuestro modelo de datos

Empezaremos de niendo el modelo de datos que usaremos para representar la base de datos.

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 3/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Vimos cmo de nirlo en la segunda parte de estos artculos. Aqu tenis una captura de pantalla de las clases del
modelo de datos creado con el diseador de LINQ to SQL de la base de datos "Northwind":

Volveremos sobre nuestro modelo de datos en el paso 5 de este tutorial cuando aadamos algunas reglas de
validacin de negocio. Pero para empezar usaremos el modelo de arriba.

Paso 2: Creacin de un listado bsico de productos.

Empezaremos a crear la interfaz con una pgina ASP.NET con un control <asp:gridview> con algun estilo css:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 4/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Podramos escribir cdigo para enlazar programticamente nuestro modelo de datos al GridView (como hicimos en la
tercera parte de la serie), o podemos usar el control <asp:linqdatasource> para enlazar el GridView al modelo de
datos.

VS2008 nos permite enlazar nuestro GridView (o cualquier control de servidor ASP.NET) gr camente a datos LINQ.
Para hacerlo tenemos que pasar a la vista de diseo, seleccionar el GridView y elegir la opcin "New Data Source ..."
en "Choose Data Source":

Esto nos mostrar un cuadro de dilogo con una lista de fuentes de datos disponibles. Seleccionamos la nueva opcin
"LINQ" y le damos el nombre que queramos:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 5/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

El diseador del control <asp:linqdatasource> nos mostrar las clases DataContext de LINQ to SQL que hay
disponibles (incluyendo aquellas que estn en las libreras que tengamos referenciadas):

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 6/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Seleccionaremos el modelo que creamos con el diseador de LINQ to SQL. Seleccionaremos la tabla que queramos
que sea la entidad principal con la que enlazar el grid. En nuestro caso seleccionaremos la clase Products. Tambin
seleccionamos el boton "Advanced" y habilitaremos las actualizaciones y borrados para la fuente de datos:

Cuando hagamos clic en el botn "Finish", VS 2008 declarar un contorl <asp:linqdatasource> en el .aspx y actualizar
el gridview para que use esta fuente de datos. Tambin generar las columnas necesarias para los diferentes campos
de la clase Product:

Ahora desplegamos el "smart task" del grid view y le indicamos que queremos habilitar la paginacin, ordenado,
edicin y borrado:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 7/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Podemos pular F5 para ejecutar la aplicacin, y veremos una pgina con el listado de productos con paginacin y
ordenado:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 8/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Tambin podemos pulsar los botones "edit" o "delete" en cada la para actualizar los datos:

Si pasamos a la vista de cdigo de la pgina, veremos las marcas que contiene. El control <asp:linqdatasource>
apunta a la clase DataContext, y a la tabla que le dijimos al principio. El GridView tiene como fuente de datos el
control <asp:linqdatasource> (en el DatasourceID) y le indica qu columnas tienen que incluirse en el grid, cul es el
texto de la cabecera, y cual es la expresin de ordenacin:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 9/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Ahora tenemos lo bsico para empezar a trabajar con el comportamiento de esta interfaz de usuario.

Paso 3: Limpiando las columnas.

El grid tiene muchas columnas, y dos de ellas (el SupplierId y el CategoryID) son claves ajenas, que no conviene
mostrar al usuario.

Eliminando columnas innecesarias

Empezaremos eliminando alguna de las columnas que no necesitamos. Podemos hacer esto en la vista de
cdigo(borrando la declaracin de <asp:bound eld> correspondiente) o en la vista de diseo (haciendo clic en la
columna y seleccionando la tarea "remove"). Por ejemplo, podemos eliminar la columna "QuantityPerUnit" y ejectuar
la aplicacin:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 10/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Si hemos usado el contorl <asp:ObjectDataSource> y le hemos indicado explcitamente los parmetros de


actualizacin (update) a los mtodos de actualizacin (por defecto cuando usamos un DataSet basado en
TableAdapters) una de las cosas que tenemos que hacer es cambiar la rma de los mtodos de actualizacin del
TableAdapter. Por ejemplo: si eliminamos una columnan del grid, tenemos que modi car el TableAdapter para que
soporte los mtodos de actualizacin sin parmetros.

Con el control <asp:LinqDataSource> es que no tendramos que hacer este tipo de cambios. Simplemente borrando
(o aadiendo) una columna a la interfaz de usuario y ejecutamos la aplicacin -no hacen falta ms cambios. Con esto
conseguimos que los cambios que se hagan en la interfaz de usuario sean mucho ms fciles, y nos permite
iteraciones ms rpidas en nuestra aplicacin.

Limpiando las columnas SupplierId y CategoryID

Hasta ahora estamos mostrando valores enteros de las claves ajenas en nuestro GridView para los campos Supplier y
Category:

Desde el punto de vista del modelo de datos es correcto, pero no desde el punto de vista del usuario. Lo que
queremos hacer es mostrar el nombre de la categora y el nombre del proveedor, y mostrar una lista desplegable en
modo edicin para que podamos cambiar estas asociaciones de forma fcil.

Podemos cambiar el gridview para que muestre el nombre del proveedor y el de la categora en lugar del ID,
cambiando el <asp:BoundField> por un <asp:TemplateField>. Y en este templateField aadimos el contenido que
queramos para personalizar la vista de la columna.

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 11/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

En el cdigo siguiente aprovecharemos la capacidad de LINQ to SQL, que model este campo como una propiedad. Es
decir, posdemos enlazar de forma fcil las propiedades Supplier.CompanyName y Category.CategoryName al grid:

Ahora ejecutamos la aplicacin y tenedremos los valores de Category y Supplier de la siguiente forma:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 12/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Para tener una lista desplegable en estos dos campos en el modo edicin, tenemos que aadir dos controles
<asp:LinqDataSource> a la pgina. Los con guraremos para que se enlacen a las entidades Categories y Suppliers del
modelo de datos creado por LINQ to SQL:

Ahora volvemos a la columnas <asp:TemplateField> que aadimos antes y personalizaremos la parte de edicin
(especi cando un EditItemTemplate). De forma que tendremos una lista desplegable en la vista edicin, donde los
valores disponibles se obtendrn de las fuentes de datos de categoras y proveedores, y enlazaremos doblemente el
valor seleccionado al SupplierId y CategoryID de las claves ajenas:

Y ahora, cuando el usuario haga clic en el botn de edicin, se mostrar una lista con todos los proveedores
disponibles:

Y cuando salvemos los cambios se guardar el valor seleccionado en la lista desplegable.

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 13/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Paso 4: Filtrando el listado de productos.

Ms que mostrar todos los productos de la base de datos, podemos actualizar la interfaz de usuario para incluir una
lista desplegable que permita al usuario ltrar los productos por una categora particular.

Como ya aadimos un <asp:LinqDataSource> enlazada a las Categoras de nuesto modelo de LINQ to SQL, slo
tendremos que crear un nuevo control de lista desplegable y enlazarlo. Por ejemplo:

Cuando ejecutemos la pgina tendremos un ltro con todas las categoras al principio de la pgina:

Lo ltimo que queda es que cuando seleccionemos una categora se muestren los productos de dicha categora en el
gridview. Lo ms facil es seleccionar la opcin de "Con gure DataSource" en el smart task del GridView:

Con esto veremos el cuadro de dialogo para con gurar el <asp:LinqDataSource> que usamos al principio del tutorial.
Seleccionamos el botn "Where" para aadir un campo de ltro al datasource. Podemos aadir cualquier nmero de
expresiones, y declarativamente asignar los valores con los que ltrar (por ejemplo: de una querystring, de valores de
formulario, de cualquier control en la pgina, etc).

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 14/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Vamos a poner un ltro de productos por su CategoryID, y obtenemos el valor con el que ltrar de la lista desplegable
que creamos antes:

Cuando le damos a "Finish", el contorl <asp:linqdatasource> se actualizar para re ejar los cambios de ltrado:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 15/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Y cuando ejecutamos la aplicacin el usuario ser capaz de elegir una categora en la lista de ltrado y paginar,
ordenar, editar y borrar los productos de una categora:

El control <asp:LinqDataSource> aplicar las expresiones LINQ necesarias para que cuando se ejecute contra el
modelo de datos LINQ to SQL slo se obtengan los datos necesarios de la base de datos (por ejemplo: en el grid
anterior slo obtendremos 3 las con los productos de la categora Confection).

Tambin podemos gestionar nosotros el evento Selecting si queremos escribir expresiones LINQ personalizadas.

Paso 5: Aadir reglas de validacin de negocio

Como ya vimos en la cuarta parte de esta serie de post, cuando de nimos modelos de datos con LINQ to SQL
tendremos un conjunto de esquemas de validacinpor defecto en el modelo de clases. Es decir, si intentamos meter
un valor nulo en una columna requerida, intentar asignar un string a un entero, o asignar una valor de clave ajena en
una la que no exista, el modelo lanzar un error y se asegurar de que la integrar de la base de datos se mantiene.

El esquema bsico de validacin es slo el primer paso, y es muy raro en la mayora de aplicaciones reales.
Normalmente necesitaremos aadir reglas adicionales a nuestro modelo de datos. Afortunadamente con LINQ to SQL
podemos aadir estas reglas de forma muy fcil (para ms detalles sobre este tema, leed la cuarta parte de esta serie
de post).

Ejemplo de escenario con reglas de validacin

Por ejemplo, supongamos una regla bsica que queramos reforzar. Queremos que un usuario de nuestra aplicacin
no pueda interrumpir un producto mientras haya unidades pedidas:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 16/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Si un usuario intenta guardar la la anterior, queremos prevenir que ese cambio se guarde en la base de datos y que
genere un error para que el usuario lo arregle.

Aadiendo una regla de validacin al modelo de datos.

El sitio incorrecto para aadir este tipo de validacin es en la capa de presentacin. Aadirlo en esta capa implica que
esta regla ser slo vlida en un lugar concreto, y no ser automtico en cualquier parte de la aplicacin. Distribuir la
lgica de negocio en la capa de presentacin tambin har que nuestra vida sea realmente penosa a medida que
nuestra aplicacin crezca - ya que cualquier cambio/actualizacin en nuestro negocio hara necesarios cambios de
codigo en todas partes.

El lugar correcto para este tipo de validacin es en las clases del modelo de datos de LINQ to SQL. Como ya vimos en
la cuarta parte de esta serie, todas las clases se generan por el diseador de LINQ to SQL como clases parciales - con
lo que podemos aadir mtodos/eventos/propiedades fcilmente. El modelo de LINQ to SQL ejectuar los mtodos
de validacin que podemos implementar.

Por ejemplo, Podemos aadir una clase parcial Product a nuestro proyecto que implemente el mtodo parcial
OnValidate() que LINQ to SQL llama antes de guardar las entidades de Product. En este mtodo podemos aadir la
siguiente regla de negocio para segurarnos que los productos no pueden tener un Reorder Level si el producto es
discontinued:

Una vez que aadimos la clase anterior al proyecto LINQ to SQL, la regla anterior se comprobar cada vez que alguien
use nuestro modelo de datos e intente modi car la base de datos. Esto se hace tanto para los productos existentes
que se vayan a actualizar como para los que se vayan a aadir nuevos.

Como el <asp:LinqDAtaSource> trabaja contra nuestro modelo de datos, cada actualizacin/insercin/borrado pasar
por esta regla de validacin antes de guardar los cambios. No necesitamos hacer nada ms en la capa de
presentacin para que se cumpla esta regla - se comprobar cada vez que se use nuestro modelo de datos.

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 17/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Aadir un manejador de errores en la capa de presentacin.

Por defecto si un usuario usa nuestro GridView para meteruna combinacin no vlida de UnitOnOrder/Discontinued,
nuestro modelo LINQ to SQL lanzar una excepcin. El <asp:LinqDataSource> capturar la excepcin y nos
proporciona un evento que podemos usar para controlarlo. Si nadie usa el evento, el contol GridView (u otro)
enlazado al <asp:LinqDataSource> capturar el error y proveer un evento para controlarlo. Si nadie controla el error
ser pasado al manejador d ela pgina, y si nadie lo controla, se le pasar al evento Application_Error() en el archivo
Global.asax. Los desarrolladores pueden hacer esto en cualquier paso del camino para aadir la lgica de errores que
queramos en la capa de presentacin.

Para la aplicacin que estamos viendo, seguramente el mejor lugar para controlar cualquier error de actualizacin sea
en el vento rowUpdated del gridView. Este evento se ejectuar cada vez que se actualize en nuestro datasource, y
podemos ver los detalles de la excepcin si falla la actualizacin. Podemos aadir el siguiente cdigo para comprobar
si ha ocurrido un error, y mostrar un error adecuado en caso de que ocurra:

No hemos tenido que aadir ninguna validacin lgica en nuestra interfaz de usuario. En lugar de eso, estamos
obteniendo el error que lanzamos en nuestra lgica de negocio y la estamos usando para mostrar un mensaje
adecuado al usuario (Estamos mostrando un error ms genrico).

Tambin le estamos indicando que queramos que el GridView se mantenga en el modo edicin cuando ocurra un
error - de forma que podemos evitar que el usuario pierda los cambios que estaba haciendo, y modi car los valores y
darle a "update" otra vez e intentar guardarlo. Podemos aadir un control <asp:literal> en el "ErrorMessage" en
cualquier parte de la pagina que queramos para controlar donde queremos que se muestre el error:

Y ahora cuando intentemos actualizar un producto con valores erroneos veremos un mensaje de error que indica
cmo arreglarlo:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 18/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Lo bueno de esto es que podemos aadir o cambiar las reglas de negocio sin tener que cambiar nada en la capa de
presentacin. Las reglas de validacin, y sus mensajes correspondientes, pueden centralizarse en un lugar en
concreto del modelo de datos y se aplicarn en todas partes.

Resumen

El control <asp:LinqDataSource> nos da una forma fcil de enlazar controles de ASP.NETa nuestro modelo de LINQ to
SQL. Permite obtener/actualizar/insertar/borrar datos del modelo de datos.

En nuestra aplicacin hemos usado el ORM LINQ to SQL para crear un modelo limpio, orientado a objetos. Aadimos
tres contorles ASP.NET a la pgina (un gridView, una lista desplegable, y un errormessage literal), y hemos aadido
tres contorles <asp:LinqDataSource> para enlazar a Product, Category y Proveedores:

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 19/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Escribimos 5 lneas de validacin lgica y 11 lineas para la gestin de errores.

El resultado nal es una aplicacin web simple que permite a los usuarios ltrar los productos por su categora,
ordenar y paginar e cientemente dichos productos, editar los productos y guardarlos (con nuestra reglas de negocio),
y borrar productos del sistema (tambin con nuestra lgica de negocio).

En prximos post veremos en profundidad algunos escenarios con concurrencia optimista, carga a peticin, herencia
de mapeado de tablas, y el uso de procedimientos almacenados y SQL personalizados.

La prxima semana tengo pensado empezar otra serie de post sobre el control <asp:ListView> - es un nuevo control
de ASP.NET en la versin .NET 3.5. Nos permite un contorl total sobre el cdigo generado para escenarios de datos
(sin tablas, sin spans, ni estilos en linea ...), tambin veremos el soporte para paginacin, ordenado, edicin e
inserciones. Por ejemplo, podemos usarlo en lugar del Grid con un look and feel totalmente personalizado. Lo mejor
de todo, podemos cambiar el cdigo de la pgina anterior sin tener que cambiar nada del modelo de datos, la
declaracin del <asp:linqdatasource>, o el code-behind del trato de errores.

Espero que sirva

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 20/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Scott

Traducido por: Juan Mara La Ramos. Microsoft Student Partner.

toH tlhIngan Hol DajatlhlaH e DaneHa?

Nota del traductor: Voy a estar de vacaciones y no tendr acceso a Internet. Cuando vuelva traducir lo ms
rpidamente posible todo lo que Scott nos tenga preparado.

Comparte esto:

Facebook 1 Twitter LinkedIn Ms

Esta entrada fue publicada en .NET, ASP .NET, LINQ, LINQ to SQL, Scott Guthri, SQL, Visual Studio el 19 Julio, 2007
[http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-
asplinqdatsource/] .

25 pensamientos en LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el


ASP:LinqDatSource

Miguel ngel
4 Febrero, 2008 en 18:13

Hola, buenas tardes:

Me gustara seguir el post para hacer el ejemplo, pero en el navegador de Internet (Internet Explorer y Mozilla Firefox)
no aparece por completo las imgenes capturadas, se cortan por la derecha.
Por lo dems, este post y el resto me estn sirviendo de ayuda.

Un saludo,

Miguel ngel

Vio
5 Febrero, 2008 en 7:37

Buenas, conozco el problema de las imgenes. Pero no encuentro un tema de WordPress en el que pueda hacer lo
que comentas y que adems me guste el diseo.
De todas formas si haces clic con el botn derecho y copias y pegas la direccin de la imagen y la abres en una
ventana del navegador, la veras al completo.

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 21/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Un saludo.

Gus
12 Abril, 2008 en 21:30

Excelente trabajo de traduccin. Muy valioso. Espero que continues as. Felicitaciones!!!

Oscar Calderon
25 Abril, 2008 en 16:23

Est excelente esta serie de tutoriales, solo una duda y es si es posible hacer un LINQdataSource compuesto de varias
tablas, es que yo tengo un datalist y ahi quiero mostrar datos de 3 tablas y nose como hacer para oder usar ahi el
LINQDataSource

Vio
26 Abril, 2008 en 12:00

Hola Oscar.
Para hacer lo que quieres deberas crearte una vista en la base de datos con los campos necesarios que quieres
mostrar en tu datalist.
La arrastras al modelo de datos para que te la mapee en una clase. Y cuando creas el LinqDatasource lo asocias a esa
clase.

Espero que sirva

demian
2 Junio, 2008 en 13:48

Excelente traduccin, ahora tengo una consulta para cualquiera q me pueda responder, en el paso 4 yo lo hice
funcionar barbaro, ahora si tengo un valor que sea todos, y me gustaria que ponga todos los valores, como hago?
cual es la expresion que se tiene que usar?, y si no estube viendo por medio del metodo selecting del datasource con
un if(listbox1.selectedValue =todos){ expresion linq general}. pero no anda, alguien me puede dar una mano?

ulises
27 Agosto, 2008 en 4:29

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 22/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Excelente informacion, pero me gustaria saber como pasar informacion de un consulta de link a un textbox
,dropdown, porque a veces se requere trabajar solo con un registro especi co y no con toda la tabla,. espero su
repuesta, muchas gracias

vermicida
27 Agosto, 2008 en 13:47

En el caso concreto de la tabla Product, a la hora de crear el partial class para el mtodo OnValidate(), es necesario
arrastrasr el argumento System.Data.Linq.ChangeAction que tiene de nido en el diseo del dbml, al menos en el caso
de usar C#.

Lo comento porque en este tutorial viene como Private Sub OnValidate() para VB, mientras que usando C# se debe
usar partial void OnValidate(System.Data.Linq.ChangeAction action).

Me ha costado un buen rato darme cuenta xD

Marcos
3 Junio, 2009 en 18:39

Hola ayudenme por favor en la tal Partial Class para en OnValidate() en VB no logro que me funcione no se si estoy
creando mal la clase o que suceda que nunca entra en esta validacion me pueden orientar?

Jaime
12 Septiembre, 2008 en 15:02

Na. ni madres pinche LINQ no jala pa nada.. putada

Julian Enrique Beaujardin Cruz


16 Septiembre, 2008 en 20:49

Buen trabajo,

me parecio bastante explicto, gracias me sirvio de mucho

Rey
http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 23/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

30 Septiembre, 2008 en 0:37

Excelente material.
Acabo de tomar una prueba de LINQ online, que me parece bastante buena y se las dejo de tarea:
http://www.aprendamas.net/Articulos/ExamenLINQ.aspx

Vio
30 Septiembre, 2008 en 7:09

Rey:
Muchas gracias por el enlaze, a ver si pasamos el examen o vamos a Septiembre

krlos
13 Octubre, 2008 en 19:49

El trabajo completo es excelente. Gracias a todos los que lo hicieron posible. Miguel Angel has probado el navegador
Opera(v 9.xx), tiene una opcin Fit to Width(ajustar en pantalla) que viene como anillo al dedo para leer este post y
resolver el problema de las imgenes. Adems te recomiendo Opera por n^n razones

Belisario
3 Diciembre, 2008 en 17:59

Hola me puedes ayudar quiero conectar la base de batos creado en sql a visual.net como puedo hacer, por que debo
crear una ventana de ingrese de datos y consultas

Jess Flores
24 Junio, 2009 en 21:48

Porqu ?
Porqu todos los tutoriales decentes de .NET 2008 o LINQ usan ASPx ?

Me frustra muchisimo. Es una tcnologia que no deseo usar (ASPx). Los tutoriales estn exquisitamente bin
realizados. Pero ASPx no por favor.

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 24/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

Cual sera la forma correcta de asignar los valores del modelo (los datos) a los controles (UI) de una aplicacin de
gestin, no web ? A poder ser, sin wizards o asistentes. Con cdigo. Que sera lo apropiado ?

Gracias por todo.

Vio
28 Junio, 2009 en 9:47

Hola Jess:

Para aplicaciones de windows forms no existe el Linq data source por diferentes motivos. Lo que si puedes hacer es
establecer la fuente de datos de, por ejemplo, un gridview y decirle que la fuente de datos es del tipo Object. En este
enlace tienes una forma de cmo hacerlo:
http://blogs.msdn.com/wriju/archive/2007/11/02/linq-to-sql-windows-form-binding-data-step-by-step.aspx

Espero que sirva

Marcelo
30 Octubre, 2009 en 14:26

Muy buena la exposicin, estoy siguiendo paso a paso, estoy en el 5 paso y me encontre con un problemita. Agregu
una vista a mi Datacontext y le aregue una asociacion de la tabla orders a la vista que utilizo. Pero al momento de
hacer: me da un error y me dice que en el objeto orders no hay una propiedad mivista. Aclaro que soy muy novato
en esto.

esteban
16 Diciembre, 2010 en 17:19

Hola, tengo un problema,


cuando relaciono el linkdatasource con el gridview, el gridview no me da las opciones de editar, eliminar?? porque
puede ser esto.
Tengo 3 tablas que son VENTA ITEM_VENTA PRODUCTOS.
Si me permite editar los PRODUCTOS, pero no me permite editar ITEM_VENTA que tiene dos claves, una de venta y
otra a productos.

Como puedo solucionar esto??

Saludos,
Esteban

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 25/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

esteban
16 Diciembre, 2010 en 17:28

Un amigo encontro la solucin a mi problema, es porque el linkdatasource no tenia habilitadas las propiedades de
edicin, borrado y etc

aleka
19 Junio, 2011 en 3:05

Exelente material, Gracias por compartirlo!!!!!

tecla
26 Abril, 2012 en 6:39

muchas gracias, a vos por el esfuerzo y por supuesto al autor original.


compartir con la comunidad es un acto muy noble.
muy valioso todo esto!!
saludos!!

elfoMDK
2 Julio, 2012 en 3:22

Como subo al IIS 7 una apliacion hecha en MVC con acceso a base de datos con LINQ

Nicolas
14 Enero, 2015 en 16:21

hola tengo un problema con el linqdatasourse, cuando quiero con gurarlo no me aparace el datacontext que se crea
junto con las tablas , cuando hago el modelo, es decir ya tengo el modelo con todas las tablas y tambien el
datacontext (los veo en el visor de clases). pero en el diseador cuando quiero con gurar el origen de datos, no
aparece nungun datacontext para elegir en la lista, espero tu respuesta muchas gracias

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 26/27
23/8/2017 LINQ to SQL (5 Parte) Enlazar controles de interfaz de usuario con el ASP:LinqDatSource | Speaking in .NET

juanlao Autor

25 Enero, 2015 en 20:32

Hola Nicolas:
Seguro que en lo foros de MSDN te podrn ayudar mejor: https://social.msdn.microsoft.com/Forums/es-ES/home

Gracias y lamento no saber ayudarte

Los comentarios estn cerrados.

http://speakingin.net/2007/07/19/linq-to-sql-5%c2%aa-parte-enlazar-controles-de-interfaz-de-usuario-con-el-asplinqdatsource/ 27/27

También podría gustarte