Control Gridview
-
Upload
eduardo-cadenas-sarabia -
Category
Documents
-
view
560 -
download
8
Transcript of 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.
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.
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:
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.
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.
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" />
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.
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.
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.
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.
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.
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
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.
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" />
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.
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" />
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.
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.
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>
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.
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.
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.
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.
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
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.
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())
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.
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
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.