29
Programación servidor 1 Lección 22 El control GridView (I) El acceso a la información y la gestión eficaz de la misma es una de las principales metas de muchas aplicaciones Web actuales. Esta información se encuentra, por lo general, dispersa en multitud de orígenes de datos: correo electrónico, bases de datos, archivos… La arquitectura de ADO.NET nos permite acceder a toda esta información utilizando una interfaz de programación única y homogénea. ADO.NET nos ofrece dos enfoques para el acceso a datos. El primero de ellos, el desconectado, se adapta a la perfección a muchos escenarios típicos de aplicaciones Web. Este enfoque hace uso del objeto DataSet, que nos permite almacenar y manipular los datos recuperados de un origen de datos a través de un proveedor específico. No obstante, todos estos componentes de ADO.NET únicamente proporcionan las “herramientas de trabajo”. ¿Cómo mostramos la información al usuario? Visión general Para realizar el acceso a datos, una aplicación basada en el marco de trabajo .NET utiliza las clases ofrecidas por ADO.NET: conexiones, comandos, adaptadores, lectores, conjuntos de datos… Como sabemos, una aplicación ASP.NET es un tipo especializado de aplicación .NET, por lo que podemos utilizar este mismo enfoque. Sin embargo, al igual que sucede en otras áreas, ASP.NET también simplifica enormemente la estrategia de acceso a datos. Utilizando una sintaxis declarativa, podemos llegar a ser capaces de resolver muchas de las necesidades más comunes, como por ejemplo: Mostrar un conjunto de datos seleccionado desde un origen de datos. Ordenar y paginar datos. Crear, modificar y eliminar datos en un origen de datos. Crear vistas de datos del tipo maestro detalle. A pesar de estas facilidades, a medida que la complejidad de una aplicación aumenta, se hace cada vez más necesario el control preciso que nos ofrece ADO.NET. La sintaxis declarativa de acceso a datos de ASP.NET se materializa en los denominados controles enlazados a datos. Esto controles no son otra cosa que controles estándar de ASP.NET, en los que los valores de ciertas propiedades se expresan mediante un lenguaje de marcado (expresiones de enlace a datos) que el motor de ejecución de ASP.NET interpreta.

Control Gridview

Embed Size (px)

Citation preview

Page 1: Control Gridview

Programación servidor 1

Lección 22

E l control Gr idView (I)

El acceso a la información y la gestión eficaz de la misma es una de las principales

metas de muchas aplicaciones Web actuales. Esta información se encuentra, por lo

general, dispersa en multitud de orígenes de datos: correo electrónico, bases de

datos, archivos… La arquitectura de ADO.NET nos permite acceder a toda esta información utilizando una interfaz de programación única y homogénea.

ADO.NET nos ofrece dos enfoques para el acceso a datos. El primero de ellos, el

desconectado, se adapta a la perfección a muchos escenarios típicos de

aplicaciones Web. Este enfoque hace uso del objeto DataSet, que nos permite

almacenar y manipular los datos recuperados de un origen de datos a través de un proveedor específico.

No obstante, todos estos componentes de ADO.NET únicamente proporcionan las “herramientas de trabajo”. ¿Cómo mostramos la información al usuario?

Visión general

Para realizar el acceso a datos, una aplicación basada en el marco de trabajo .NET

utiliza las clases ofrecidas por ADO.NET: conexiones, comandos, adaptadores,

lectores, conjuntos de datos…

Como sabemos, una aplicación ASP.NET es un tipo especializado de aplicación .NET,

por lo que podemos utilizar este mismo enfoque. Sin embargo, al igual que sucede

en otras áreas, ASP.NET también simplifica enormemente la estrategia de acceso a

datos. Utilizando una sintaxis declarativa, podemos llegar a ser capaces de

resolver muchas de las necesidades más comunes, como por ejemplo:

Mostrar un conjunto de datos seleccionado desde un origen de datos.

Ordenar y paginar datos.

Crear, modificar y eliminar datos en un origen de datos.

Crear vistas de datos del tipo maestro – detalle.

A pesar de estas facilidades, a medida que la complejidad de una aplicación

aumenta, se hace cada vez más necesario el control preciso que nos ofrece

ADO.NET.

La sintaxis declarativa de acceso a datos de ASP.NET se materializa

en los denominados controles enlazados a datos. Esto controles

no son otra cosa que controles estándar de ASP.NET, en los que los

valores de ciertas propiedades se expresan mediante un lenguaje

de marcado (expresiones de enlace a datos) que el motor de ejecución de ASP.NET interpreta.

Page 2: Control Gridview

Programación servidor 2

Sin embargo, muchos escenarios de acceso a datos se encuentran en un punto

intermedio del espectro: son demasiado complejos para utilizar exclusivamente la

sintaxis declarativa, pero no lo suficiente como para requerir una programación

totalmente personalizada mediante ADO.NET.

Es en estos casos cuando ASP.NET vuelve a ofrecernos una elegante solución en

forma de controles: controles de origen de datos y controles de presentación

de datos.

Controles de origen de datos

Un control de origen de datos es un control de ASP.NET cuya principal objetivo es la de actuar como vínculo entre nuestra aplicación Web y un origen de datos.

Las responsabilidades de este tipo de controles incluyen:

Establecer la conexión con el origen de datos especificado.

Gestionar las operaciones de obtención de datos.

Administrar la aplicación de cambios en los datos.

Al igual que sucede con las clases fundamentales de ADO.NET, los controles de

origen de datos de ASP.NET se clasifican de acuerdo al origen de datos que van a utilizar, pero nos ofrecen una interfaz de programación coherente y homogénea.

Los controles de origen de datos que incluye ASP.NET “de serie” son:

ObjectDataSource: proporciona acceso a u objeto .NET que representa

una entidad de negocio o de la lógica de la aplicación.

SqlDataSource: proporciona acceso a un origen de datos de tipo base de

datos relacional a través de un proveedor de datos .NET. Mediante este

control podemos acceder a datos alojados en Microsoft SQL Server, Oracle y

orígenes ODBC, entre otros.

AccessDataSource: proporciona acceso a los objetos de una base de datos

Microsoft Access.

XmlDataSource: proporciona acceso a un origen de datos XML, como por

ejemplo un documento XML alojado en disco.

Como ya comentamos con anterioridad, el uso de bases

de datos Microsoft Access no está recomendado en el

ámbito de aplicaciones Web de tipo empresarial.

Page 3: Control Gridview

Programación servidor 3

SqlDataSource

El control de origen de datos SqlDataSource representa un origen de datos de tipo

base de datos SQL.

La siguiente tabla recoge las principales propiedades de la clase SqlDataSource:

Propiedad Descripción

CacheDuration

Obtiene o establece el periodo de

tiempo, expresado en segundos, que el

control almacena en memoria caché los

datos recuperados por una consulta de selección.

CacheExpirationPolicy

Obtiene o establece el comportamiento

de caducidad de caché que, cuando se

combina con la duración, describe el

comportamiento de la caché que utiliza el control.

CacheKeyDependency

Obtiene o establece una dependencia

clave definida por el usuario que se

vincula a todos los objetos de caché de

datos creados por el control. Todos los

objetos de caché caducan explícitamente cuando caduca la clave.

CancelSelectOnNullParameter

Obtiene o establece un valor lógico que

indica si se ha cancelado una operación

de recuperación de datos cuando algún

parámetro de la colección

SelectParameters se evalúa como

referencia de objeto null (Nothing en

Visual Basic).

En Visual Studio, para agregar un control de origen de datos

SqlDataSource desde el Diseñador de páginas ASP.NET, utilizamos

el siguiente botón del Cuadro de herramientas:

El aspecto del control de servidor en la vista Diseño de la página es:

Page 4: Control Gridview

Programación servidor 4

Propiedad Descripción

ConflictDetection

Obtiene o establece un valor que indica

cómo el control realiza las

modificaciones cuando cambia la base de datos durante la operación.

ConnectionString

Obtiene o establece la cadena de

conexión específica del proveedor de

datos ADO.NET que utiliza el control para conectarse a una base de datos.

DataSourceMode Obtiene o establece el modo de la

recuperación de datos que utiliza el

control para obtener los datos.

DeleteCommand Obtiene o establece la cadena SQL que

utiliza el control para eliminar datos de la base de datos.

DeleteCommandType

Obtiene o establece un valor que indica

si el texto de la propiedad

DeleteCommand es una instrucción SQL

o el nombre de un procedimiento almacenado.

DeleteParameters Obtiene la colección de parámetros

utilizados en las operaciones de eliminación de datos.

EnableCaching Obtiene o establece un valor lógico que

indica si el almacenamiento en caché está habilitado.

FilterExpression Obtiene o establece una expresión de

filtrado que se aplica cuando se recuperan datos.

FilterParameters Obtiene una colección de parámetros

que están asociados a los marcadores de posición de la cadena FilterExpression.

InsertCommand Obtiene o establece la cadena de SQL

que utiliza el control para insertar datos en la base de datos.

InsertCommandType

Obtiene o establece un valor que indica si

el texto de la propiedad InsertCommand es

una instrucción SQL o el nombre de un

procedimiento almacenado.

Page 5: Control Gridview

Programación servidor 5

Propiedad Descripción

InsertParameters Obtiene la colección de parámetros

utilizados en las operaciones de

inserción de datos.

ProviderName

Obtiene o establece el nombre del

proveedor de datos de .NET Framework

que utiliza el control para conectar a un

origen de datos.

SelectCommand Obtiene o establece la cadena de SQL

que utiliza el control para recuperar datos de la base de datos.

SelectCommandType

Obtiene o establece un valor que indica si

el texto de la propiedad SelectCommand es

una instrucción SQL o el nombre de un procedimiento almacenado.

SelectParameters Obtiene la colección de parámetros

utilizados en las operaciones de recuperación de datos.

UpdateCommand Obtiene o establece la cadena de SQL

que utiliza el control para actualizar

datos en la base de datos.

UpdateCommandType

Obtiene o establece un valor que indica si

el texto de la propiedad UpdateCommand

es una instrucción SQL o el nombre de un

procedimiento almacenado.

UpdateParameters Obtiene la colección de parámetros

utilizados en las operaciones de actualización de datos.

La siguiente tabla recoge los principales métodos de la clase SqlDataSource:

Método Descripción

Delete Realiza una operación de eliminación mediante la

cadena SQL DeleteCommand y los parámetros de la colección DeleteParameters.

Insert Realiza una operación de inserción mediante la cadena

SQL InsertCommand y los parámetros de la colección

InsertParameters.

Page 6: Control Gridview

Programación servidor 6

Select Realiza una operación de selección mediante la cadena

SQL SelectCommand y los parámetros de la colección

SelectParameters.

Update Realiza una operación de actualización mediante la

cadena SQL UpdateCommand y los parámetros de la colección UpdateParameters.

La siguiente tabla recoge los principales eventos de la clase SqlDataSource:

Eventos Descripción

Deleted Señala el final de una operación de eliminación.

Deleting Señala el comienzo de una operación de eliminación.

Filtering Señala el comienzo de una operación de filtrado.

Inserted Señala el final de una operación de inserción.

Inserting Señala el comienzo de una operación de inserción.

Selected Señala el final de una operación de selección.

Selecting Señala el comienzo de una operación de selección.

Updated Señala el final de una operación de actualización.

Updating Señala el comienzo de una operación de actualización.

Crea un origen de datos para la base de datos SQL Server

eCommerce alojada en el servidor local que recupera todos los

datos de la tabla Productos.

<asp:SqlDataSource

ID="ProductosECommerce"

runat="server"

ProviderName="System.Data.SqlClient"

ConnectionString=

"Data Source=localhost;Initial Catalog=eCommerce;"

SelectCommand="SELECT * FROM Productos" />

Page 7: Control Gridview

Programación servidor 7

GridView

El control GridView es uno de los principales controles de presentación de datos que pone a nuestra disposición ASP.NET.

Este control nos permite mostrar en forma tabular los elementos de un origen de

datos. El control GridView ofrece, entre otras, las siguientes características:

Enlace a controles de origen de datos.

Capacidad de ordenación de datos integrada.

Funciones de actualización y eliminación de datos integradas.

Presentación paginada de datos.

Capacidad de selección de filas datos.

Modelo de programación declarativo y / o mediante código.

Aspecto personalizable mediante temas y estilos ASP.NET.

En Visual Studio, para agregar un control GridView desde el

Diseñador de páginas ASP.NET, utilizamos el siguiente botón del

Cuadro de herramientas:

El aspecto del control de servidor en la vista Diseño de la página es:

El control GridView reemplaza al control DataGrid

presente en versiones anteriores de ASP.NET y ahora

considerado obsoleto.

Page 8: Control Gridview

Programación servidor 8

La siguiente tabla recoge las principales propiedades de la clase GridView:

Propiedad Descripción

AllowPaging Obtiene o establece un valor lógico que

indica si la característica de paginación

está habilitada.

AllowSorting Obtiene o establece un valor lógico que

indica si la característica de ordenación está habilitada.

AlternatingRowStyle Obtiene el objeto TableItemStyle que

permite establecer la apariencia de las filas de datos alternas del control.

AutoGenerateColumns

Obtiene o establece un valor lógico que

indica si se deben crear

automáticamente campos enlazados para cada campo del origen de datos.

AutoGenerateDeleteButton

Obtiene o establece un valor lógico que

indica si se agrega automáticamente una

columna de campo CommandField con

un botón Eliminar para cada fila de datos del control.

AutoGenerateEditButton

Obtiene o establece un valor lógico que

indica si se agrega automáticamente una

columna de campo CommandField con

un botón Editar para cada fila de datos del control.

AutoGenerateSelectButton

Obtiene o establece un valor lógico que

indica si se agrega automáticamente una

columna de campo CommandField con

un botón Seleccionar para cada fila de

datos del control.

BackImageUrl Obtiene o establece la dirección URL de

una imagen que se va a mostrar en el fondo del control.

BottomPagerRow Obtiene un objeto GridViewRow que

representa la fila de paginación inferior del control.

Page 9: Control Gridview

Programación servidor 9

Propiedad Descripción

Caption

Obtiene o establece el texto que se va a

representar en un elemento de título

HTML del control. Esta propiedad se

proporciona de modo que el control sea

más accesible para los usuarios de

dispositivos de tecnología de ayuda.

CaptionAlign

Obtiene o establece la posición

horizontal o vertical del elemento de

título HTML del control. Esta propiedad

se proporciona de modo que el control

sea más accesible para los usuarios de dispositivos de tecnología de ayuda.

CellPadding Obtiene o establece la cantidad de

espacio entre el contenido de una celda

y el borde de la misma.

CellSpacing Obtiene o establece la cantidad de

espacio entre las celdas.

Columns Obtiene una colección de objetos

DataControlField que representan los

campos de columna del control.

DataKeyNames

Obtiene o establece una matriz que

contiene los nombres de los campos de

clave principal de los elementos

mostrados en el control.

DataKeys

Obtiene una colección de objetos

DataKey que representan el valor de

clave de los datos de cada fila del

control.

EditIndex Obtiene o establece el índice de la fila

que se va a editar.

EditRowStyle

Obtiene una referencia al objeto

TableItemStyle que permite establecer

la apariencia de la fila seleccionada para ser editada en el control.

EmptyDataRowStyle

Obtiene una referencia al objeto

TableItemStyle que permite establecer

la apariencia de la fila de datos vacía

que se representa cuando el control no contiene registros.

Page 10: Control Gridview

Programación servidor 10

Propiedad Descripción

EmptyDataTemplate

Obtiene o establece el contenido definido

por el usuario para la fila de datos vacía

que se representa cuando el control se

enlaza a un origen de datos que no contiene registros.

EmptyDataText

Obtiene o establece el texto que se

mostrará en la fila de datos vacía que se

representa cuando el control se enlaza a

un origen de datos que no contiene registros.

FooterRow Obtiene un objeto GridViewRow que

representa la fila de pie de página del control.

FooterStyle

Obtiene una referencia al objeto

TableItemStyle que permite establecer

la apariencia de la fila de pie de página del control.

GridLines Obtiene o establece el estilo de cuadrícula del control.

HeaderRow Obtiene un objeto GridViewRow que

representa la fila de encabezado del control.

HeaderStyle

Obtiene una referencia al objeto

TableItemStyle que permite establecer

la apariencia de la fila de encabezado del control.

HorizontalAlign Obtiene o establece la alineación horizontal l control en la página.

PageCount Obtiene el número de páginas necesarias

para mostrar los registros del origen de datos en el control.

PageIndex Obtiene o establece el índice de la

página que se muestra actualmente.

PagerSettings

Obtiene una referencia al objeto

PagerSettings que permite establecer

las propiedades de los botones de paginación del control.

Page 11: Control Gridview

Programación servidor 11

Propiedad Descripción

PagerStyle

Obtiene una referencia al objeto

TableItemStyle que permite establecer

la apariencia de la fila de paginación del control.

PagerTemplate Obtiene o establece el contenido

personalizado de la fila de paginación del

control.

PageSize Obtiene o establece el número de

registros que se van a mostrar en una página del control.

RowHeaderColumn

Obtiene o establece el nombre de la

columna que se utilizará como

encabezado de columna para el control.

Esta propiedad se proporciona de modo

que el control sea más accesible para los

usuarios de dispositivos de tecnología de ayuda.

Rows Obtiene una colección de objetos

GridViewRow que representan las filas

de datos del control.

RowStyle

Obtiene una referencia al objeto

TableItemStyle que permite establecer

la apariencia de las filas de datos del

control.

SelectedDataKey Obtiene el objeto DataKey que contiene

el valor de la clave de datos para la fila seleccionada en el control.

SelectedIndex Obtiene o establece el índice de la fila

seleccionada en el control.

SelectedRow Obtiene una referencia a un objeto

GridViewRow que representa la fila seleccionada en el control.

SelectedRowStyle

Obtiene una referencia al objeto

TableItemStyle que permite establecer

la apariencia de la fila seleccionada en el control.

Page 12: Control Gridview

Programación servidor 12

Propiedad Descripción

ShowFooter Obtiene o establece un valor lógico que

indica si se muestra la fila de pie de

página en el control.

ShowHeader Obtiene o establece un valor lógico que

indica si se muestra la fila de encabezado en el control.

SortDirection Obtiene el sentido de ordenación de la

columna que se va a ordenar.

SortExpression Obtiene la expresión de ordenación

asociada a la columna o columnas que se van a ordenar.

TopPagerRow Obtiene un objeto GridViewRow que

representa la fila de paginación superior del control.

UseAccesibleHeader

Obtiene o establece un valor lógico que

indica si el control representa su

encabezado en un formato accesible.

Esta propiedad se proporciona de modo

que el control sea más accesible para los

usuarios de dispositivos de tecnología de ayuda.

La siguiente tabla recoge los principales métodos de la clase GridView:

Método Descripción

DataBind Enlaza el origen de datos al control.

DeleteRow Elimina el registro en el índice

especificado del origen de datos.

Como puedes ver, algunas de las propiedades de este control están

enfocadas a hacerlo más accesible para usuarios con algún tipo de

discapacidad.

La accesibilidad de la Web es un tema cada día más importante,

como lo demuestra la iniciativa WAI (Web Accesibility Initiative,

Iniciativa de Accesibilidad Web) promovida por el W3C.

WAI

Page 13: Control Gridview

Programación servidor 13

Método Descripción

Sort Ordena el control según la expresión y el

sentido de ordenación especificados.

UpdateRow Actualiza el registro en el índice de fila

especificado utilizando los valores de campo de la fila.

La siguiente tabla recoge los principales eventos de la clase GridView:

Evento Descripción

PageIndexChanged Señala el clic en uno de los botones de

paginación después de que el control se ocupe de la operación de paginación.

PageIndexChanging Señala el clic en uno de los botones de

paginación antes de que el control se

ocupe de la operación de paginación.

RowCancelingEdit Señala el clic en el botón Cancelar de

una fila en modo de edición antes de que la fila salga del mismo.

RowCommand Señala el clic en un botón del control.

RowCreated Señala la creación de una fila en el

control.

RowDataBound Señala el enlace de datos de una fila del

control.

RowDeleted Señala el clic en el botón Eliminar de

una fila después de que el control elimine la misma.

RowDeleting Señala el clic en el botón Eliminar de

una fila antes de que el control elimine

la misma.

RowUpdated Señala el clic en el botón Actualizar de

una fila después de que el control actualice la misma.

RowUpdating Señala el clic en el botón Actualizar de

una fila antes de que el control actualice la misma.

Page 14: Control Gridview

Programación servidor 14

Evento Descripción

SelectedIndexChanged Señala el clic en el botón Seleccionar

de una fila después de que el control se

ocupe de la operación de selección.

SelectedIndexChanging Señala el clic en el botón Seleccionar

de una fila antes de que el control se ocupe de la operación de selección.

Sorted

Señala el clic en el hipervínculo para

ordenar una columna después de que el

control se ocupe de la operación de ordenación.

Sorting

Señala el clic en el hipervínculo para

ordenar una columna antes de que el

control se ocupe de la operación de ordenación.

Resumen

En esta lección has visto cómo ASP.NET te ofrece tres alternativas para el acceso a

datos en una aplicación Web: el uso directo de las clases ADO.NET, el enlace a datos puramente declarativo y el uso de controles de acceso a datos.

Los controles de acceso a datos se dividen en controles de origen de datos y

controles de presentación de datos. Los primeros te permiten establecer el

vínculo entre la aplicación Web y el origen de datos, mientras que los segundos son los encargados de mostrar la información al usuario.

Por último, has aprendido los rudimentos del control GridView, uno de los controles de presentación de datos más flexibles que te ofrece ASP.NET.

Crea un control GridView, enlazado al origen de datos de productos

eCommerce, que incluye un pié de página, botones de selección en

cada fila y un tamaño de página de 20 registros.

<asp:GridView

ID="VistaProductos"

runat="server"

DataSourceID="ProductosECommerce"

AutoGenerateSelectButton="True"

ShowFooter="True"

PageSize="20" />

Page 15: Control Gridview

Programación servidor 15

Lección 23

E l control Gr idView (y II)

El control GridView incluye potentes características de presentación de datos,

entre las que se incluyen la ordenación, paginación y selección de datos.

Sin embargo, este control va más allá e incorpora la capacidad de manipular los

datos enlazados, añadiendo, actualizando e incluso eliminándolos.

Todas estas posibilidades se traducen en un rico, y extenso, modelo de programación que debemos conocer para aprovechar al máximo todas sus posibilidades.

Ordenar los datos

El control GridView nos permite realizar una ordenación simple de los datos sin

necesidad de escribir código de manipulación de datos específico.

Para habilitar la ordenación, una vez declarado el control GridView y establecido el

enlace de datos, debemos completar los siguientes pasos:

Establecer el valor de la propiedad AllowSorting al valor lógico Verdadero.

Opcionalmente, establecer el valor de la propiedad SortExpression con la

expresión que identifica el criterio de ordenación inicial.

Opcionalmente, deshabilitar la ordenación en columnas específicas

estableciendo su propiedad SortExpression en una cadena vacía.

Entendemos como ordenación simple aquella en la que los datos se

ordenan de acuerdo a un único criterio. Para realizar ordenaciones

complejas, según varios criterios, debemos escribir el código de

manipulación de datos correspondiente.

En el caso de un origen de datos de tipo base de datos relacional, la

expresión de ordenación representará, por lo general, el nombre de

una columna de una tabla.

Aplica como criterio de ordenación inicial aquel que tenga

más sentido o sea utilizado con mayor frecuencia. De esta

forma, el usuario del sitio Web dispondrá, en la mayor parte

de las situaciones, de unos datos ya ordenados.

Page 16: Control Gridview

Programación servidor 16

Paginar los datos

El control GridView nos permite mostrar al usuario el conjunto resultado agrupado

en páginas de datos. Esta forma de presentación aporta la ventaja de ofrecer un

conjunto de resultados más sencillo de “analizar” visualmente.

Una ventaja adicional de la paginación es que el control ofrece unos tiempos de

latencia más reducidos, ya que no debe recuperar todo el conjunto de resultados,

sino únicamente aquellos datos que se van a mostrar en la página actual.

El control GridView nos ofrece varios modos de paginación:

NextPrevious: muestra los botones Anterior y Siguiente.

NextPreviousFirstLast: muestra los botones Anterior, Siguiente, Primero y Último.

Numeric: muestra un conjunto de botones numerado que representan cada

una de las páginas de resultados.

NumericFirstLast: muestra botones numerados que representan cada una

de las páginas de resultados y los botones Primero y Último.

El proveedor de datos subyacente debe soportar la recuperación

selectiva de datos. La mayor parte de los orígenes de datos de tipo

base de datos lo soportan, pero otros no. En estos casos, el control

GridView simulará la recuperación selectiva.

La paginación de los resultados no siempre es una

cualidad deseable. Si el usuario debe visualizar todos los

datos simultáneamente (por ejemplo, para compararlos

entre sí) no debemos habilitar la paginación.

Crea un control GridView, enlazado al origen de datos de productos

eCommerce, que incluye ordenación automática de datos. Establece

el orden predeterminado según la columna de datos Precio.

<asp:GridView

ID="VistaProductos"

runat="server"

DataSourceID="ProductosECommerce"

AllowSorting="true"

SortExpression="Precio" />

Page 17: Control Gridview

Programación servidor 17

Para habilitar la paginación, una vez declarado el control GridView y establecido el

enlace de datos, debemos completar los siguientes pasos:

Establecer el valor de la propiedad AllowPaging al valor lógico Verdadero.

Opcionalmente, establecer el valor de la propiedad PageSize con número de

registros que se mostrarán por página.

Opcionalmente, establecer el valor de la propiedad PagerSettings-Mode al

modo de paginación deseado.

Seleccionar los datos

El control GridView no sólo muestra los datos de un origen, sino que permite al

usuario interactuar con los registros individuales a través de un mecanismo de

selección de filas.

Para habilitar la selección, una vez declarado el control GridView y establecido el

enlace de datos, debemos completar los siguientes pasos:

Establecer el valor de la propiedad AutoGenerateSelectButton al valor

lógico Verdadero.

Crea un control GridView, enlazado al origen de datos de productos

eCommerce, que incluye paginación automática de datos, con 10

registros por página. Utiliza el modo de paginación NumericFirstLast.

<asp:GridView

ID="VistaProductos"

runat="server"

DataSourceID="ProductosECommerce"

AllowPaging="True"

PageSize="10"

PagerSettings-Mode="NumericFirstLast" />

La selección de datos únicamente es una operación de tipo “visual”,

es decir, sin consecuencias en el origen de datos. No obstante, la

selección de datos es el primer paso para realizar operaciones sobre

los mismos a través del control GridView.

Personaliza el aspecto de las filas seleccionadas mediante la

propiedad SelectedRowStyle. De esta forma, el usuario tendrá una pista visual de qué filas están seleccionadas.

Page 18: Control Gridview

Programación servidor 18

Manipular los datos

Tal y como ya hemos mencionado, el control GridView permite a los usuarios no

sólo visualizar los datos, sino también manipularlos.

El control GridView nos permite realizar tres operaciones de manipulación de datos:

Edición: modifica los datos existentes.

Eliminación: borrar los datos existentes.

Inserción: agrega nuevos datos a los ya existentes.

Para habilitar la edición, una vez declarado el control GridView y establecido el

enlace de datos, debemos completar los siguientes pasos:

Establecer el valor de la propiedad UpdateCommand del origen de datos

asociado a la expresión de actualización de datos.

Establecer el valor de la propiedad ShowEditButton del campo de comando

de las columnas al valor lógico Verdadero.

Crea un control GridView, enlazado al origen de datos de productos

eCommerce, que incluye selección automática de datos. Establece el

color de fondo de las filas seleccionadas a Plata.

<asp:GridView

ID="VistaProductos"

runat="server"

DataSourceID="ProductosECommerce"

AutoGenerateSelectButton="True">

<SelectedRowStyle BackColor="Silver" />

</asp:GridView>

/

Cualquier manipulación de los datos por parte del usuario

debe considerarse como una operación potencialmente

peligrosa. Por lo tanto, debemos diseñar la aplicación

Web de tal forma que los privilegios necesarios para

ejecutarla sean los mínimos posibles, reduciendo así las consecuencias de un posible ataque malintencionado.

En el caso de un origen de datos de tipo base de datos, la expresión

de actualización representará, por lo general, una sentencia UPDATE en lenguaje SQL o el nombre de un procedimiento almacenado.

Page 19: Control Gridview

Programación servidor 19

Recuerda que los detalles de sintaxis de los comandos y

los parámetros son dependientes del tipo de proveedor

de datos utilizado.

Crea un origen de datos para la base de datos SQL Server

eCommerce alojada en el servidor local que recupera todos los

datos de la tabla Productos y permite su actualización.

<asp:SqlDataSource

ID="ProductosECommerce"

runat="server"

ProviderName="System.Data.SqlClient"

ConnectionString=

"Data Source=localhost;Initial Catalog=eCommerce;"

SelectCommand="SELECT * FROM Productos"

UpdateCommand="UPDATE Productos SET Nombre = @Nombre,

Descripcion = @Descripcion, Precio = @Precio WHERE

Codigo = @ Codigo" >

<UpdateParameters>

<asp:Parameter Name="Nombre" Type="String" />

<asp:Parameter Name="Descripcion" Type="String" />

<asp:Parameter Name="Precio" Type="Decimal" />

<asp:Parameter Name="Codigo" Type="Int32" />

</UpdateParameters>

<asp:SqlDataSource />

Crea un control GridView, enlazado al origen de datos de productos

eCommerce, que incluye selección automática de datos y permite su

edición.

<asp:GridView

ID="VistaProductos"

runat="server"

DataSourceID="ProductosECommerce"

AutoGenerateSelectButton="True">

<Columns>

<asp:CommandField ShowEditButton="True" />

</Columns>

</asp:GridView>

Page 20: Control Gridview

Programación servidor 20

Para habilitar la inserción y eliminación de datos procederemos de manera análoga

estableciendo las expresiones correspondientes del origen de datos.

Resumen

En esta lección has visto algunas de las características avanzadas del control GridView, que van más allá de la simple presentación de datos.

Has aprendido a ordenar los datos, mostrar los resultados agrupados en páginas,

seleccionar datos individuales y manipular los mismos; y todo ello sin necesidad de escribir código especializado.

Alternativamente, podemos habilitar la edición de datos

estableciendo la propiedad AutoGenerateEditButton al valor lógico Verdadero.

Page 21: Control Gridview

Programación servidor 21

Lección 24

Comandos y lectores de datos

Para acceder a los datos de una base de datos y trabajar con ellos se puede hacer

permaneciendo conectados o sin conexión, trabajando sobre la memoria y

transfiriendo los datos modificados o directamente sobre la base de datos, todo dependerá de la aplicación.

Hemos visto en lecciones anteriores cómo acceder a los datos almacenándolos en

un conjunto de datos, ahora veremos cómo hacerlo trabajando directamente sobre la base de datos.

Visión general

Como hemos visto en lecciones anteriores un DataSet permite guardar la

información, que ha traído de la base de datos, en una memoria caché y trabajar

en modo desconectado.

Un DataSet está formado por un grupo de objetos DataTable que pueden ser

relacionados entre sí por medio de objetos DataRelation. Puede acceder a datos

independientemente del origen, por ejemplo, de SQL Server o de archivos XML.

También permite ver los datos de distintas maneras con el objeto DataView.

Cuando se terminan de hacer las modificaciones de los datos, recordemos que se

encuentran en una memoria caché, si queremos que estos se mantengan se

establece nuevamente la conexión para actualizar los datos con los cambios

realizados.

Otra forma de acceso a datos que proporciona ADO.NET es realizar las operaciones

directamente en la base de datos y leer los registros mediante un lector de datos.

En este caso se usa un comando de datos con una instrucción SQL o una referencia

a un procedimiento almacenado. Tanto las instrucciones SQL como los

procedimientos almacenados se ejecutan llamando a consultas de TableAdapter o

también por medio de la ejecución de métodos en objetos Command.

Cuando se ha establecido la conexión con el origen de datos se puede hacer uso del

objeto Command para ejecutar órdenes y devolver resultados.

Algunas ventajas de trabajar directamente sobre la base de datos incluyen:

Funcionalidad adicional. Para ejecutar operaciones DDL (Data Definition

Languaje, Lenguaje de definición de datos), no hay otra forma de sino a

través de los comandos de datos.

Más control sobre la ejecución. Se puede tener un control más directo

sobre cómo y cuándo se ejecuta una instrucción SQL o un procedimiento

almacenado; también se obtiene mayor control sobre los resultados.

Page 22: Control Gridview

Programación servidor 22

Menos operaciones de procesamiento. La lectura y escritura se hace

directamente sobre la base de datos, ahorrando así el proceso de

almacenamiento de la información en un conjunto de datos.

Menor programación. En algunos escenarios al utilizar un conjunto de

datos se hace necesario programación adicional. Manipulando directamente

la base de datos se pueden evitar ese trabajo adicional.

La utilidad de trabajar directamente sobre la base de datos se pone de manifiesto

en situaciones como las siguientes:

Consultas sobre datos que son sólo de lectura.

Consultas que devuelven un único valor, como por ejemplo el resultado de

un cálculo.

Creación y modificación de entidades de base de datos.

En otras circunstancias es más conveniente trabajar con un conjunto de datos:

Para gestionar tablas relacionadas.

Para intercambiar datos con otros procesos.

Para trabajar con un conjunto estático de registros.

En muchos casos resultará indiferente utilizar una estrategia u otra. En esos casos

debería prevalecer la economía de código: escribir la menor cantidad posible de

código fuente.

Trabajar directamente sobre la base de datos es posible gracias a los comandos y

lectores de datos.

Los comandos de datos se utilizan para encapsular instrucciones SQL y llamadas

a procedimientos almacenados. Utilizaremos un comando de datos para cada

operación, ya que estas se ejecutan de forma independiente.

Un objeto lector de datos recoge los datos de la base de datos y los pasa a la

aplicación. El marco de trabajo .NET suministra un objeto lector de datos para cada

uno de los proveedores de datos: SqlDataReader, OleDbDataReader,

OdbcDataReader y OracleDataReader.

Independientemente de la estrategia que utilices para acceder

a los datos es importante minimizar la cantidad de información

utilizada en una página. Así conservarás los recursos del

servidor, que de otra forma podrían agotarse si una consulta tiene que devolver una gran cantidad de datos innecesarios.

Page 23: Control Gridview

Programación servidor 23

Command

Un comando de datos representa una instrucción SQL o una llamada a un

procedimiento almacenado que puede ser ejecutado directamente. Es una instancia

de una clase según el proveedor de datos: OdbcCommand, OleDbCommand,

OracleCommand o SqlCommand.

Los comandos de datos permiten llevar a cabo acciones como estas:

Ejecutar sentencias Select para que devuelvan resultados que, por medio

de un lector de datos, puedan ser leídos directamente. El lector de datos

tiene un comportamiento de sólo lectura y de sólo avance.

Ejecutar comandos de definición de base de datos que permitan crear, editar

y quitar tablas, estructuras de base de datos como tablas o procedimientos

almacenados.

Ejecutar comandos para obtener información del catálogo de dase de datos.

Ejecutar comandos SQL dinámicos.

Ejecutar comandos que devuelven un único valor.

La información que requiere el comando de datos para ejecutar los comandos con

la base de datos son:

Conexión Referencia a una conexión para

comunicarse con la base de datos.

Nombre del

comando

Una instrucción SQL o el nombre de un

procedimiento almacenado.

Parámetros De entrada o salida, para establecer o

leer individualmente valores.

Los procedimientos almacenados agrupan las operaciones de base de datos en un

único comando, optimizándolas para producir un mayor rendimiento y coherencia

lógica.

Para llamar a un procedimiento almacenado hay que pasar su nombre en forma de

instrucción SQL, seguido de los argumentos de parámetros.

El uso de parámetros depende sensiblemente del

proveedor de datos.

Page 24: Control Gridview

Programación servidor 24

Proveedor de datos para

SQL Server

Proveedor de datos para

OLE DB y ODBC

Los nombres de los

parámetros agregados a la

colección Parameters deben

coincidir con los nombres de los

marcadores de parámetros del procedimiento almacenado.

El orden de los parámetros

agregados a la colección

Parameters debe coincidir con

el orden de los parámetros del procedimiento almacenado.

Trata los parámetros del

procedimiento almacenado

como parámetros con nombre

y busca los marcadores de parámetros que coinciden.

Trata los parámetros del

procedimiento almacenado

como marcadores de posición

y aplica los valores de los parámetros siguiendo el orden.

No permite utilizar el marcador

de posición de signo de

interrogación de cierre (?).

Deben utilizarse parámetros

con nombre.

No permite utilizar parámetros

con nombre. Debe utilizarse el

marcador de posición de signo de interrogación de cierre (?).

Cuando queremos realizar consultas de selección se utiliza la instrucción SELECT

que recupera filas de la base de datos y habilita la selección de una o varias filas o

columnas. En la mayoría de las ocasiones se deben suministrar las siguientes

especificaciones:

Las columnas que debe devolver (SELECT).

Las tablas que se utilizan en la instrucción (FROM).

La condición de búsqueda que las filas deben cumplir (WHERE).

El ordenamiento de las columnas en los resultados (ORDER BY).

Para insertar, modificar o eliminar datos de una base de datos utilizamos el método

ExecuteNonQuery, que nos devolverá el número de filas afectadas.

SqlCommand

Esta clase representa un procedimiento almacenado o una instrucción de Transact-

SQL que se ejecuta en una base de datos de SQL Server.

Su sintaxis es la siguiente:

'Declaración Public NotInheritable Class SqlCommand Inherits DbCommand Implements ICloneable 'Uso Dim instance As SqlCommand

Page 25: Control Gridview

Programación servidor 25

La siguiente tabla recoge las principales propiedades de la clase SqlCommand:

Propiedad Descripción

CommandText

Obtiene o establece el

procedimiento almacenado o la

instrucción de Transact-SQL que se ejecuta en el origen de datos.

CommandTimeout

Obtiene o establece el tiempo de

espera antes de terminar el

intento de ejecutar un comando y generar un error.

CommandType Obtiene o establece un valor

que indica cómo se interpreta la

propiedad CommandText.

Connection Obtiene o establece la conexión

SqlConnection que utiliza esta instancia de SqlCommand.

Parameters Obtiene la colección

SqlParameterCollection.

Transaction Obtiene o establece la

transacción SqlTransaction en la que se ejecuta el comando.

La siguiente tabla recoge los principales métodos de la clase SqlCommand:

Método Descripción

ExecuteNonQuery Ejecuta una instrucción de Transact-SQL

en la conexión y devuelve el número de filas afectadas.

ExecuteReader Envía la propiedad CommandText a

Connection y crea un objeto SqlDataReader.

ExecuteScalar

Ejecuta la consulta y devuelve la primera

columna de la primera fila del conjunto de

resultados devuelto por la consulta. Las

demás columnas o filas no se tienen en cuenta.

Page 26: Control Gridview

Programación servidor 26

Método Descripción

ExecuteXmlReader Envía CommandText a Connection y

crea un objeto XmlReader.

La siguiente tabla recoge los principales eventos de la clase SqlCommand:

Evento Descripción

StatementCompleted Señala el final de la ejecución de una

instrucción Transact-SQL.

DataReader

El objeto DataReader se utiliza para recuperar información de una base de datos

en modo de sólo lectura y de sólo avance.

Los resultados se almacenan en el búfer para ser solicitados posteriormente con el

método Read del DataReader.

Con este objeto se puede lograr reducir la sobrecarga del sistema ya que con su

forma de funcionamiento permite aumentar el rendimiento de la aplicación.

Existe un lector de datos específico para cada proveedores de datos de .NET:

SqlDataReader, OdbcDataReader, OleDbDataReader y OracleDataReader.

El objeto DataReader trabaja en colaboración con el objeto Command para

recuperar las filas de un origen de datos.

Mientras se usa el lector de datos se mantiene abierta la conexión con la base de

datos, pero cuando ya no lo necesitamos debemos hacer una llamada al método

Close del DataReader, para que libere la conexión.

' Abrimos la conexión con la base de datos eCommerce.

Dim conexion As New SqlConnection( _

"Data Source=localhost;Initial Catalog=eCommerce;")

conexion.Open()

' Definimos un comando que calcula el número de productos.

Dim comando As New SqlCommand

comando.Connection = conexion

comando.CommandText = "SELECT COUNT(*) FROM Productos"

' Ejecutamos el comando en modo escalar.

Dim numeroProductos As Integer = _

CInt(comando.ExecuteScalar())

Page 27: Control Gridview

Programación servidor 27

Las principales ventajas de usar un DataReader incluyen, entre otras:

Aumenta el rendimiento, ya que no recupera toda la información

simultáneamente en la memoria de nuestro equipo; se evitan así el consumo

excesivo de recursos y los tiempos de latencia elevados asociados a la

lectura de grandes conjuntos de datos.

Permite indicar más de una selección de registros.

Sin embargo, el uso de un lector de datos también incurre en ciertas desventajas:

Usa de forma exclusiva la conexión a la base de datos, por lo que no es

posible utilizar de forma simultánea dos lectores sobre una misma conexión.

No permite un acceso aleatorio a los datos, ni la modificación de los mismos.

SqlDataReader

Esta clase proporciona una forma de leer una secuencia de filas sólo hacia

delante en una base de datos SQL Server.

Su sintaxis es la siguiente:

'Declaración Public Class SqlDataReader Inherits DbDataReader Implements IDataReader, IDisposable, IDataRecord 'Uso Dim instance As SqlDataReader

La siguiente tabla recoge las principales propiedades de la clase SqlDataReader:

Propiedad Descripción

Connection Obtiene el objeto SqlConnection asociado

al lector.

Depth Obtiene un valor que indica la profundidad

del anidamiento de la fila actual.

FieldCount Obtiene el número de columnas de la fila

actual.

Para crear una instancia de SqlDataReader debes usar

el método ExecuteReader del objeto SqlCommand.

Page 28: Control Gridview

Programación servidor 28

Propiedad Descripción

HasRows Obtiene un valor que indica si el lector

contiene una o varias filas.

IsClosed Recupera un valor lógico que indica si se

ha cerrado la instancia del lector.

Item Obtiene el valor de una columna en su

formato nativo.

RecordsAffected Obtiene el número de filas cambiadas,

insertadas o eliminadas por la ejecución de una instrucción de Transact-SQL.

VisibleFieldCount Obtiene el número de campos del lector

que no están ocultos.

La siguiente tabla recoge los principales métodos de la clase SqlDataReader:

Método Descripción

Close Cierra el lector.

NextResult Desplaza el lector al siguiente resultado

cuando se leen los resultados de las instrucciones de Transact-SQL por lotes.

Read Desplaza el lector hasta el siguiente

registro.

' Abrimos la conexión con la base de datos eCommerce.

Dim conexion As New SqlConnection( _

"Data Source=localhost;Initial Catalog=eCommerce;")

conexion.Open()

' Definimos un comando devuelve número de productos.

Dim comando As New SqlCommand("SELECT * FROM Productos", _

conexion)

' Recorremos el conjunto de resultados.

Dim lector As SqlDataReader = comando.ExecuteReader()

While (lector.Read())

' Utilizamos los datos recuperados.

End While

Page 29: Control Gridview

Programación servidor 29

Resumen

En esta lección hemos estudiado la forma de acceder a una base de datos de forma directa y has visto qué ventajas, e inconvenientes, presenta este enfoque.

También has aprendido la forma de utilizar los objetos Command y DataReader, particularizados al caso de acceso a una base de datos SQL Server.