Tutorial: Recuperar, actualizar, insertar y eliminar datos con los controles LinqDataSource y DetailsView
Actualización: noviembre 2007
En este tutorial creará una tabla de base de datos sencilla y una página web que usa el control LinqDataSource. La página web permite a los usuarios recuperar, actualizar, insertar y eliminar datos de la tabla de base de datos. Usará un control DetailsView para mostrar los datos. El control LinqDataSource permite realizar todas estas operaciones sin escribir instrucciones Select, Update, Insert ni Delete.
Usará Diseñador relacional de objetos para crear una clase que represente la tabla de base de datos que contiene los valores. El control LinqDataSource interactuará con esta clase generada para recuperar, actualizar, insertar y eliminar los datos.
Requisitos previos
Para implementar los procedimientos en su propio entorno de desarrollo, necesitará:
Visual Studio 2008 o Visual Web Developer Express
SQL Server Express Edition instalado en el equipo. Si tiene SQL Server instalado, puede usarlo, pero debe realizar pequeños ajustes en algunos procedimientos.
Un sitio Web de ASP.NET.
Crear una tabla de base de datos
Para realizar los pasos de este tutorial, debe disponer de una tabla de base de datos. Si aún no dispone de una tabla, puede crearla con el procedimiento siguiente. Si usa una tabla existente, los pasos en algunos de los procedimientos no coincidirán exactamente con su base de datos. Sin embargo, los conceptos ilustrados en el tutorial serán los mismos.
Para crear una tabla de base de datos
Si el sitio web no tiene todavía una carpeta App_Data, en el Explorador de soluciones, haga clic con el botón secundario en el proyecto, haga clic en Agregar carpeta ASP.NET y, a continuación, en App_Data.
Haga clic con el botón secundario en la carpeta App_Data y, a continuación, haga clic en Agregar nuevo elemento.
En Plantillas instaladas, seleccione Base de datos de SQL, cambie el nombre de archivo a Reviews.mdf y, a continuación, haga clic en Agregar.
En el Explorador de servidores, abra el nodo Reviews.mdf y, a continuación, haga clic con el botón secundario en la carpeta Tablas.
Haga clic en Agregar nueva tabla.
Cree las columnas siguientes en la tabla:
Nombre de columna
Tipo de datos
Propiedades
MovieID
int
IsIdentity = Sí
Not null
Clave principal
Title
nvarchar(50)
Theater
nvarchar(50)
Review
nvarchar(1000)
Score
int
Not null
Guarde la tabla y asígnele el nombre MovieReviews.
Agregue varios registros a la tabla MovieReviews con datos de ejemplo.
En el Explorador de servidores, haga clic con el botón secundario en la tabla MovieReviews y haga clic en Mostrar datos de tabla. No tiene que especificar un valor para MovieID porque la base de datos genera este valor.
Crear clases para representar entidades de base de datos
Para trabajar con el control LinqDataSource, trabaja con clases que representan entidades de base de datos. Puede usar una herramienta de Visual Studio 2008 o Visual Web Developer Express para crear estas clases.
Para crear una clase para la tabla MovieReviews
Si el sitio web no tiene todavía una carpeta App_Code, en el Explorador de soluciones, haga clic con el botón secundario en el proyecto, haga clic en Agregar carpeta ASP.NET y, a continuación, en App_Code.
Haga clic con el botón secundario del mouse en la carpeta App_Code y, a continuación, haga clic en Agregar nuevo elemento.
En Plantillas instaladas, seleccione la plantilla Clases de LINQ to SQL, cambie el nombre del archivo a Reviews.dbml y, a continuación, haga clic en Agregar.
Se muestra el Diseñador relacional de objetos.
En el Explorador de servidores, arrastre la tabla MovieReviews a la ventana Diseñador relacional de objetos.
La tabla MovieReviews y sus columnas se representan como una entidad denominada MovieReview en la ventana del diseñador.
Guarde el archivo Reviews.dbml.
En el Explorador de soluciones, abra el archivo Reviews.designer.cs o Reviews.designer.vb.
Observe que ahora incluye clases para ReviewsDataContext y MovieReview. La clase ReviewsDataContext representa la base de datos y la clase MovieReview representa la tabla de base de datos. El constructor sin parámetros de la clase ReviewsDataContext lee la cadena de conexión del archivo Web.config.
Abra el archivo Web.config.
Observe que la cadena de conexión se ha agregado en el elemento connectionStrings.
Cierre el archivo de clase y el archivo Web.config.
Crear y configurar un control LinqDataSource
Ahora que cuenta con una tabla de base de datos y clases que representan las entidades de base de datos, puede usar un control LinqDataSource en una página web ASP.NET para administrar los datos.
Para crear y configurar un control LinqDataSource
En Visual Studio, cree una nueva página web ASP.NET y cambie a la vista Diseño.
En la ficha Datos del Cuadro de herramientas, arrastre un control LinqDataSource y colóquelo dentro del elemento form en la página web.
Puede dejar la propiedad ID como LinqDataSource1.
Establezca la propiedad ContextTypeName en ReviewsDataContext.
Establezca la propiedad TableName en MovieReviews.
Establezca AutoPage en true y cambie a la vista Código fuente.
En el ejemplo siguiente se muestra el marcado declarativo del control LinqDataSource.
<asp:LinqDataSource ContextTypeName="ReviewsDataContext" TableName="MovieReviews" AutoPage="true" ID="LinqDataSource1" > </asp:LinqDataSource>
Observe que no tuvo que especificar ningún comando de base de datos para seleccionar los datos.
Agregar un control para mostrar datos
Ahora puede agregar un control DetailsView y enlazarlo al control LinqDataSource. El control DetailsView permite a los usuarios ver datos administrados por el control LinqDataSource.
Para conectar los datos de LinqDataSource a DetailsView
En la ficha Datos del Cuadro de herramientas, haga doble clic en el control DetailsView para agregarlo a la página.
Puede dejar la propiedad ID como DetailsView1.
Establezca la propiedad DataSourceID en LinqDataSource1.
Establezca la propiedad DataKeyNames en MovieID.
Establezca AllowPaging en true.
En el ejemplo siguiente se muestra el marcado declarativo del control DetailsView.
<asp:DetailsView DataSourceID="LinqDataSource1" DataKeyNames="MovieID" AllowPaging="true" ID="DetailsView1" > </asp:DetailsView>
Guarde los cambios y presione CTRL+F5 para ver la página en un explorador.
El control DetailsView muestra los valores del registro actual de la tabla MovieReviews. El control DetailsView crea automáticamente los controles web para mostrar cada columna de la tabla de base de datos.
Permitir a los usuarios actualizar, insertar y eliminar datos
El control LinqDataSource puede crear los comandos para actualizar, insertar y eliminar datos.
Para habilitar operaciones de actualización, inserción y eliminación
En el control LinqDataSource, establezca las propiedades EnableUpdate, EnableInsert y EnableDelete en true.
En el ejemplo siguiente se muestra el marcado declarativo del control LinqDataSource.
<asp:LinqDataSource ContextTypeName="ReviewsDataContext" TableName="MovieReviews" AutoPage="true" EnableUpdate="true" EnableInsert="true" EnableDelete="true" ID="LinqDataSource1" > </asp:LinqDataSource>
En el control DetailsView, establezca las propiedades AutoGenerateEditButton, AutoGenerateInsertButton y AutoGenerateDeleteButton en true.
Para limitar los campos que se muestran en el control DetailsView y establecer el orden de los campos, establezca la propiedad AutoGenerateRows en false.
Agregue campos para las columnas Title, Theater, Rating y Review, y enlácelos a los campos de datos correspondientes.
En el ejemplo siguiente se muestra el marcado declarativo del control DetailsView.
<asp:DetailsView DataSourceID="LinqDataSource1" DataKeyNames="MovieID" AutoGenerateRows="false" AutoGenerateEditButton="true" AutoGenerateInsertButton="true" AutoGenerateDeleteButton="true" AllowPaging="true" ID="DetailsView1" > <Fields> <asp:BoundField HeaderText="Title" DataField="Title" /> <asp:BoundField HeaderText="Theater" DataField="Theater" /> <asp:BoundField HeaderText="Number of Stars" DataField="Score" /> <asp:BoundField HeaderText="Review" DataField="Review" /> </Fields> </asp:DetailsView>
La columna MovieID se selecciona en el origen de datos con las otras columnas. Sin embargo, no se muestra en el control DetailsView y el usuario no podrá modificar su valor. Se debe seleccionar la propiedad MovieID para permitir al control LinqDataSource crear automáticamente los comandos para actualizar, insertar y eliminar datos.
Observe que no tuvo que especificar comandos para estas operaciones de datos.
Guarde los cambios y presione CTRL+F5 para ver la página en un explorador.
El control DetailsView muestra los campos del registro actual de la tabla MovieReviews. Puede actualizar, insertar y eliminar registros si hace clic en los botones correspondientes del control DetailsView.
Pasos siguientes
Este tutorial ha mostrado la funcionalidad básica de la actualización, inserción y eliminación de registros con el control LinqDataSource. Para obtener información sobre las funciones adicionales del control LinqDataSource, puede hacer lo siguiente:
Puede filtrar qué registros de datos se devuelven mediante la especificación de un valor en la propiedad Where. También puede seleccionar sólo un subconjunto de columnas mediante la especificación de un valor en la propiedad Select. Para obtener más información, vea Tutorial: Seleccionar y filtrar un subconjunto de datos con los controles LinqDataSource y GridView.
Para asegurarse de que los datos de la base de datos no han cambiado desde que la página web los leyó, el control LinqDataSource almacena los valores originales de todos los datos seleccionados. Cuando la actualización se envía al servidor web, el objeto LinqDataSource compara cada campo almacenado con el valor actual en la base de datos. Si coinciden (lo que indica que el registro no ha cambiado), el objeto LinqDataSource actualiza o elimina el registro. El almacenamiento de todos los valores de columna originales puede resultar ineficaz. Para evitar este problema, puede agregar una columna timestamp a la tabla de base de datos. Para obtener más información, vea Tutorial: Usar una marca de tiempo con el control LinqDataSource para comprobar la integridad de los datos.
Vea también
Conceptos
Información general sobre el control de servidor web LinqDataSource