grid view asp 2005

41
[email protected] I.S.C. Alejandro Guzmán Zazueta 87 Módulo 8. Acceso a datos del servidor Introducción a los datos del servidor El acceso a datos es la esencia de cualquier aplicación del mundo real y ASP.NET proporciona un nutrido conjunto de controles que se integran bien con las API de acceso administrado a datos que proporciona Common Language Runtime. En esta sección se describen varias iteraciones de un ejemplo que utiliza el control GridView de ASP.NET para enlazar con los resultados de consultas SQL y archivos de datos XML. También se supone cierta familiaridad con los fundamentos de bases de datos y el lenguaje de consulta SQL. El acceso a datos en el servidor es exclusivo en cuanto a la ausencia básica de información de estado de las páginas Web, lo que presenta algunas dificultades al intentar realizar transacciones como insertar o actualizar registros a partir de un conjunto de datos recuperados desde una base de datos. Como se verá en esta misma sección, el control GridView puede ayudar a administrar estas dificultades, lo que permite concentrarse más en la lógica de la aplicación y menos en los detalles de la administración del estado y el control de eventos. Conexiones, comandos y conjuntos de datos Common Language Runtime proporciona un conjunto completo de interfaces API de acceso a datos administrados para el desarrollo de aplicaciones con un uso intensivo de datos. Estas API ayudan a extraer los datos y a presentarlos de forma coherente sin importar el origen real (SQL Server, OLEDB, XML, entre otros). Básicamente, hay tres objetos con los que más se trabaja: conexiones, comandos y conjuntos de datos. Una conexión representa una conexión física a algún almacén de datos, como SQL Server o un archivo XML. Un comando representa una directiva para recuperar (select) desde el almacén de datos o manipular dicho almacén (insert, update, delete). Un conjunto de datos representa los datos reales con los que trabaja una aplicación. Hay que tener en cuenta que los conjuntos de datos se encuentran siempre desconectados de la conexión de origen y el modelo de datos correspondiente, y que pueden modificarse de forma independiente. Sin embargo, los cambios que se realizan en un conjunto de datos pueden reconciliarse fácilmente con el modelo de datos originario. Obtener acceso a datos basados en SQL Una aplicación suele necesitar realizar una o más consultas a la base de datos de SQL en lo que respecta a seleccionar, insertar, actualizar o eliminar. En la siguiente tabla se muestra un ejemplo de cada una de estas consultas. Consulta Ejemplo Selección simple SELECT * from Employees WHERE FirstName = 'Bradley'; Selección combinada SELECT * from Employees E, Managers M WHERE E.FirstName = M.FirstName; Insertar INSERT into Employees VALUES ('123-45-6789','Bradley','Millington','Program Manager'); Actualizar UPDATE Employees SET Title = 'Development Lead' WHERE FirstName = 'Bradley'; Eliminar DELETE from Employees WHERE Productivity < 10; Con el fin de proporcionar a la página acceso a las clases que se necesitarán para realizar un acceso a datos de SQL, hay que importar los espacios de nombres System.Data y System.Data.SqlClient a la página en cuestión. Enlazar datos SQL a GridView En el siguiente ejemplo se muestra una consulta de selección simple enlazada a un control GridView. GridView procesa una tabla que contiene los datos de SQL. Al igual que el control DropDownList, el control GridView admite una propiedad DataSource que toma IEnumerable o ICollection, así como DataSet. Se puede utilizar DataSet asignando la propiedad DefaultView de una tabla incluida en DataSet al nombre de la tabla que se desea utilizar dentro de DataSet. La propiedad DefaultView representa el estado actual de una tabla dentro de DataSet, incluido cualquier cambio que haya realizado el código de la aplicación (como eliminar filas o cambiar valores). Después de establecer la propiedad DataSource, se llama a DataBind() para llenar el control

Upload: marcelo-aude-barria

Post on 29-Dec-2015

55 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

87

Módulo 8. Acceso a datos del servidor Introducción a los datos del servidor

El acceso a datos es la esencia de cualquier aplicación del mundo real y ASP.NET proporciona un nutrido conjunto de controles que se integran bien con las API de acceso administrado a datos que proporciona Common Language Runtime. En esta sección se describen varias iteraciones de un ejemplo que utiliza el control GridView de ASP.NET para enlazar con los resultados de consultas SQL y archivos de datos XML. También se supone cierta familiaridad con los fundamentos de bases de datos y el lenguaje de consulta SQL.

El acceso a datos en el servidor es exclusivo en cuanto a la ausencia básica de información de estado de las páginas Web, lo que presenta algunas dificultades al intentar realizar transacciones como insertar o actualizar registros a partir de un conjunto de datos recuperados desde una base de datos. Como se verá en esta misma sección, el control GridView puede ayudar a administrar estas dificultades, lo que permite concentrarse más en la lógica de la aplicación y menos en los detalles de la administración del estado y el control de eventos.

Conexiones, comandos y conjuntos de datos

Common Language Runtime proporciona un conjunto completo de interfaces API de acceso a datos administrados para el desarrollo de aplicaciones con un uso intensivo de datos. Estas API ayudan a extraer los datos y a presentarlos de forma coherente sin importar el origen real (SQL Server, OLEDB, XML, entre otros). Básicamente, hay tres objetos con los que más se trabaja: conexiones, comandos y conjuntos de datos.

• Una conexión representa una conexión física a algún almacén de datos, como SQL Server o un archivo XML. • Un comando representa una directiva para recuperar (select) desde el almacén de datos o manipular dicho almacén

(insert, update, delete). • Un conjunto de datos representa los datos reales con los que trabaja una aplicación. Hay que tener en cuenta que los

conjuntos de datos se encuentran siempre desconectados de la conexión de origen y el modelo de datos correspondiente, y que pueden modificarse de forma independiente. Sin embargo, los cambios que se realizan en un conjunto de datos pueden reconciliarse fácilmente con el modelo de datos originario.

Obtener acceso a datos basados en SQL

Una aplicación suele necesitar realizar una o más consultas a la base de datos de SQL en lo que respecta a seleccionar, insertar, actualizar o eliminar. En la siguiente tabla se muestra un ejemplo de cada una de estas consultas.

Consulta Ejemplo

Selección simple SELECT * from Employees WHERE FirstName = 'Bradley';

Selección combinada SELECT * from Employees E, Managers M WHERE E.FirstName = M.FirstName;

Insertar INSERT into Employees VALUES ('123-45-6789','Bradley','Millington','Program Manager');

Actualizar UPDATE Employees SET Title = 'Development Lead' WHERE FirstName = 'Bradley';

Eliminar DELETE from Employees WHERE Productivity < 10;

Con el fin de proporcionar a la página acceso a las clases que se necesitarán para realizar un acceso a datos de SQL, hay que importar los espacios de nombres System.Data y System.Data.SqlClient a la página en cuestión.

Enlazar datos SQL a GridView En el siguiente ejemplo se muestra una consulta de selección simple enlazada a un control GridView. GridView procesa una tabla que contiene los datos de SQL. Al igual que el control DropDownList, el control GridView admite una propiedad DataSource que toma IEnumerable o ICollection, así como DataSet. Se puede utilizar DataSet asignando la propiedad DefaultView de una tabla incluida en DataSet al nombre de la tabla que se desea utilizar dentro de DataSet. La propiedad DefaultView representa el estado actual de una tabla dentro de DataSet, incluido cualquier cambio que haya realizado el código de la aplicación (como eliminar filas o cambiar valores). Después de establecer la propiedad DataSource, se llama a DataBind() para llenar el control

Page 2: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

88

Coloque los siguientes controles de acuerdo a la siguiente tabla:

Objeto Propiedad Valor GridView ID GridView1 Auto Fromat Simple Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 'Introducir aquí el código de usuario para inicializar la página Dim DS As System.Data.DataSet Dim Cn As New System.Data.OleDb.OleDbConnection Dim Adaptador As System.Data.OleDb.OleDbDataAdapter Cn.ConnectionString = "Provider=SQLOLEDB;User Id=sa;Password=;Data Source=(local); Initial Catalog=Curso;" Cn.Open() Adaptador = New System.Data.OleDb.OleDbDataAdapter("select Usuario,NomParticipante as [Nombre Participante],EmpOEsc as [Origen],cveCiudad from Participante", Cn) DS = New System.Data.DataSet Adaptador.Fill(DS, "NomTab") GridView1.DataSource = DS.Tables("NomTab").DefaultView GridView1.DataBind() End Sub

Page 3: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

89

Este mismo ejemplo se puede hacer sin código, a continuación se muestran dichos pasos: 1º Dar clic en la esquina superior derecha del gridview y enseguida se muestra el menú para configurar el acceso a base de datos:

2º En la opción Choose Data Source seleccione New Data Source, para crear un control DataSource, enseguida aparece la siguiente ventana:

3º En esta seleccione Database y presiona el botón de OK, a continuación se muestra la siguiente ventana:

4º Como no tenemos creada una conexión a base de datos presionaremos el botón de New Connection, mostrándonos la siguiente ventana:

Page 4: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

90

5º En esta ventana deberemos teclear el nombre de mi servidor de base de datos: (local), el usuario: sa y seleccionamos la base de datos: Curso y presionamos el botón de OK

6º Si todo fue correcto se mostrara esta ventana y presionamos el botón de Next, mostrándonos la siguiente ventana:

7º En está deberemos presionar el botón de Next, se presentará la siguiente ventana, en la cual deberemos crear la consulta que deseamos mostrar en el gridview:

Page 5: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

91

8º Para este ejemplo seleccionamos la tabla de participante y los campos como se ve en la ventana y presionamos Next, enseguida se muestra la ventana:

9º En esta presionaremos Finish, enseguida podremos ejecutar la página, dando el mismo resultado que el ejercicio anterior pero sin código.

Realizar una Selección Parametrizada También se puede realizar una selección parametrizada mediante el objeto SqlDataAdapter. En el siguiente ejemplo se muestra cómo se pueden modificar los datos seleccionados mediante el valor expuesto desde un control DropDownList seleccionado. Coloque los siguientes controles de acuerdo a la siguiente tabla:

Page 6: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

92

Objeto Propiedad Valor DropDownList ID DropDownList1 Button ID Buscar Text Buscar GridView ID GridView1 Auto Format Simple Configure el DropDownList1 como el GridView1 del ejemplo anterior: El GridView1 se configura igual que el del ejemplo anterior, pero en el paso 7 hay que agregar la condición para ligar el DropDownList1 con el GridView, entonces presione el botón Where, mostrándose la siguiente ventana:

Configúrela como se muestra y presione el botón de Add y enseguida el de OK, mostrándose la siguiente ventana:

En esta presionaremos Next, seguido de Finish, a continuación ya puede ejecutar la página, quedando como a continuación se muestra:

Page 7: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

93

Insertar datos en una base de datos de SQL Para insertar una fila en una base de datos, se puede agregar a la página un formulario de entrada sencillo y ejecutar un comando de inserción en el controlador de eventos de envío de formularios. Se utiliza la colección Parameters del objeto de comando para llenar los valores del comando. Hay que tener en cuenta que también hay que realizar una comprobación para asegurarse de que los valores requeridos no son nulos antes de intentar insertarlos en la base de datos, esto lo efectuaremos usando los controles de validación proporcionados por ASP .Net. Esto evita una infracción accidental de las restricciones de campo de la base de datos. El comando de inserción también se ejecuta dentro de un bloque try/catch, por si se da el caso de que ya exista la clave primaria de la fila insertada.

Coloque los siguientes controles de acuerdo a la siguiente tabla:

Objeto Propiedad Valor GridView ID GridView 1 Formato Automático Simple DropDownList ID DropDownList1 Button ID Agregar Text Agregar Participante TextBox ID Usuario TextBox ID NomParticipante TextBox ID EmpOEsc TextBox ID Password TextMode Password Label ID Estado Text RequiredFieldValidator ControlToValidate Usuario ErrorMessage Se requiere un Nombre de Usuario RequiredFieldValidator ControlToValidate NomParticipante ErrorMessage Se requiere el nombre del participante RequiredFieldValidator ControlToValidate EmpOEsc ErrorMessage Se requiere el nombre de la empresa o escuela RequiredFieldValidator ControlToValidate Password ErrorMessage La contraseña es obligatoria

El llenado del DropDownList1 se debe hacer en base a los ejemplos anteriores. Se deberán agregar las siguientes importaciones: Imports System.Data.OleDb Imports System.Data Se deberá agregar el siguiente código: Dim Cn As OleDbConnection Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Cn = New OleDbConnection("Provider=SQLOLEDB;User Id=sa;Password=;Data Source=(local);Initial Catalog=Curso;") If IsPostBack = True Then Exit Sub Call CargaGrid() End Sub

Sub CargaGrid() Dim DS As New DataSet Dim Adaptador As New OleDBDataAdapter("select Usuario,NomParticipante as [Nombre Participante],EmpOEsc as [Origen],cveCiudad from Participante", Cn) Adaptador.Fill(DS, "NomTab") GridView1.DataSource = DS.Tables("NomTab").DefaultView GridView1.DataBind() End Sub

Page 8: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

94

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Estado.Text = "" Dim Sentencia As String Dim Comando As OleDbCommand

Sentencia = "Insert into Participante values ('" + Usuario.Text + "', '" + NomParticipante.Text + "', '" + EmpoEsc.Text + "'," & DropDownList1.SelectedItem.Value.ToString & ", '" + Password.Text + "')"

Comando = New OleDbCommand(Sentencia, Cn) Comando.Connection.Open() Try Comando.ExecuteNonQuery() Estado.Text = "<b>Registro agregado</b><br> " & Sentencia Call LimpiarCajas() Catch Exp As System.Data.OleDb.OleDbException Estado.Text = "ERROR: no se pudo agregar el registro, compruebe que los campos están rellenos correctamente" End Try Comando.Connection.Close() CargaGrid() End Sub

Private Sub LimpiarCajas() Usuario.Text = "" NomParticipante.Text = "" EmpoEsc.Text = "" Password.Text = "" Usuario.Focus() End Sub

Page 9: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

95

Actualizar datos en una base de datos de SQL

Coloque los siguientes controles de acuerdo a la siguiente tabla:

Objeto Propiedad Valor GridView1 ID GridView1 Formato Automático Simple 1º Configurar en la esquina superior izquierda “Cose Data Source”, de acuerdo al los ejemplos anteriores con la tabla de participante y seleccionando los campos de: usuario, NomParticipante, EmpOEsc, CveCiudad. El GridView queda como a continuación se muestra:

2º Enseguida entre a editar las columnas en “Edit Columns”, como se muestra:

3º Agregar una columna de tipo “Command Field------Edit-Update-Cancel”, para que sea la primera del GridView, como a continuación se muestra:

4º Convierta la columna NomParticipante,EmpOEsc y CveCiudad a TemplateField, quedando de la siguiente manera:

Page 10: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

96

La ventana queda como a continuación se muestra:

5º Presente las propiedades del SQLDataSource y modifique la propiedad UpdateQuery, presentándose como se muestra a continuación:

Page 11: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

97

6º Ejecute la página y edite algún registro:

Como se puede observar podemos modificar un registro directamente en el GridView.

Page 12: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

98

Template Column Los controles BoundColumn no son los únicos que se pueden establecer en la colección Columns de GridView. También se puede especificar TemplateColumn, que proporciona un control total sobre el contenido de la columna. La plantilla sólo tiene contenido arbitrario; se puede procesar cualquier cosa que se desee, incluyendo controles de servidor, dentro de las columnas de GridView. En el siguiente ejemplo se muestra cómo utilizar el control TemplateColumn para procesar la columna "CveCiudad" como una lista desplegable. La sintaxis de enlace de datos de ASP.NET se utiliza para extraer el valor del campo de datos de la plantilla. Debe observarse que hay algo de lógica complicada para hacer que la lista desplegable y la casilla de verificación reflejen el estado de los datos dentro de la fila. Al igual que se puede colocar una lista desplegable o una casilla de verificación HtmlControl en TemplateColumn, también pueden colocarse otros controles. En el siguiente ejemplo se agregan controles Validator a las columnas para comprobar la entrada del cliente antes de intentar realizar la actualización. Coloque los siguientes controles de acuerdo a la siguiente tabla:

Objeto Propiedad Valor GridView ID GridView Formato Automático Simple

Siga las instrucciones del ejemplo anterior para configurar el GridView o parta del ejemplo anterior para hacer este ejercicio, la ventana queda como a continuación se muestra:

Una vez efectuado esto, en la esquina superior derecha del GridView seleccione “Edit Templates”, apareciendo la siguiente ventana:

En la esquina superior derecha del Template seleccione el NomParticipante, como se muestra a continuación:

Page 13: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

99

y, a continuación, elija el tipo de plantilla que desea editar, para este ejemplo al Nombre Participante y Empresa seleccione la plantilla “Edit Item Template” y coloque ahora al lado del TextBox un Control RequiredFieldValidator, colocando un * en la propiedad ErrorMessage y Textbox1 en la propiedad ControlToValidate. Para la Ciudad seleccione la plantilla “Edit Template” y elimine el TextBox y ahora coloque un DropDownList. Nota: Deberá asegurarse que los nombres de los controles colocados en la ventana Edit Templates, sean únicos. Una vez configurado esto hacer clic derecho y seleccionar Terminar edición de plantilla.

Page 14: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

100

Al colocar el DropDownList1 este deberá ser configurado siguiendo los siguientes pasos: Clic en la esquina superior derecha del DropDownList1 y seleccionar Choose Data Source, para crear un nuevo origen de datos como a continuación se muestra:

Asignar el nombre DWL1 al nuevo DataSource de DataBase, como se muestra a continuación:

En la siguiente ventana seleccione la conexión a la base de datos, como se muestra:

Presionar el botón de Next y configure la siguiente ventana como se muestra:

Page 15: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

101

Seleccionamos la tabla de ciudad por que es la información que se desea mostrar en el DropDownList1, en la siguiente ventana presione Finish y mostrara la siguiente ventana:

El campo a desplegar como se puede observar es el NomCiudad. Enseguida seleccionaremos Edit DataBindings, para ligar el campo del GridView con el campo del DropDownList1, configúrelo como se muestra a continuación:

Page 16: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

102

Presione el botón de Ok y en la esquina superior derecho del Template seleccione End Template Edit, como se muestra a continuación:

Lo que sigue ahora es ejecutar la página y probar la edición de un registro:

Eliminar datos en una base de datos de SQL

Realizar eliminaciones en una base de datos es muy similar a una actualización o a un comando de inserción, pero se necesita una forma de determinar la fila concreta de la cuadrícula que se va a eliminar. En el siguiente ejemplo se muestra este proceso.

Coloque los siguientes controles de acuerdo a la siguiente tabla:

Objeto Propiedad Valor GridView ID GridView 1 Formato Automático Profesional 2 Una vez colocado el GridView y configurado como los ejemplos anteriores, entre en la esquina superior derecha y seleccione Edit Columns para agregar una columna de tipo Command Field y colocarla como la primera, como a continuación se muestra:

Page 17: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

103

Page 18: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

104

La Ventana Queda como a continuación se muestra:

Enseguida seleccione del SQLDataSource y seleccione la propiedad Delete Quero, presentándose la siguiente ventana:

Escriba el Delete como se ve en la figura y enseguida presioné el botón de OK.

Page 19: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

105

Lo que resta es ejecutar la página y probarla.

Page 20: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

106

Trabajar con Relaciones de Maestros Detalles

A menudo el modelo de datos contiene relaciones que no se pueden representar sólo mediante una cuadrícula sencilla. Una interfaz Web muy común es aquella en la que una fila de datos, que se puede seleccionar, desplaza al cliente hacia una página "details" que muestra información detallada acerca de la fila seleccionada. Para conseguirlo mediante DataGrid, se puede agregar una columna HyperLinkColumn a la colección Columns, que especifica la página de detalles a la que se desplazará el cliente al hacer clic en el vínculo. La sintaxis de cadena de formato se utiliza para sustituir un valor del campo en este vínculo que se pasa como un argumento querystring. En el siguiente ejemplo se muestra este proceso.

En la página de detalles, se recupera el argumento querystring y se realiza una selección combinada para obtener detalles a partir de la base de datos. En el siguiente ejemplo se muestra este escenario.

Coloque los siguientes controles de acuerdo a la siguiente tabla:

Objeto Propiedad Valor Label1 Text Maestro Detalles GridView ID GridView1 Formato Automático Simple El GridView debe ser configurado para mostrar el contenido de la tabla Evento como lo hicimos en ejemplos anteriores y una vez hecho esto agregue la columna hipervínculo de acuerdo a la siguiente tabla: Objeto Propiedad Valor Columns Columna Hipervínculo – Text: Obtener Detalles --

DataNavigateURLFields= idEvento –- DataNavigateURLFormatString: Detalle.aspx?id={0}

Page 21: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

107

Las propiedades de las columnas del GridView se muestran en la siguiente ventana:

La Ventana Queda como a continuación se muestra:

Page 22: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

108

Este ejemplo en la columna de Hipervínculo hace referencia a la página Detalle.aspx la cual se detalla a continuación: Coloque los siguientes controles de acuerdo a la siguiente tabla:

Objeto Propiedad Valor Label1 Text Detalles Eventos GridView ID GridView Formato Automático Simple Columns Columna Enlazada: Header Text = Nombre del

Evento, DataField =DescEvento. Columns Columna Enlazada: Header Text = Nombre del

Participante, DataField = NomParticipante. Columns Columna Enlazada: Header Text = Fecha de

Inscripción, DataField = FechaInscrip

Page 23: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

109

La Ventana Queda como a continuación se muestra:

Se deberán agregar las siguientes importaciones:

Imports System.Data.OLEDB Imports System.Data

Se deberá agregar el siguiente código en modo Code: Dim Cn As OleDBConnection Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim Sentencia As String Dim DS As New DataSet Dim Comando As OleDbDataAdapter Sentencia = "Select DescEvento,NomParticipante,FechaInscrip " & _ "From (Participante A Inner Join ListaEvento B On (A.Usuario = B.Usuario) ) Inner Join Evento C On (B.IdEvento = C.IdEvento) " & _ "Where C.idEvento = " & Request.QueryString("id") Cn = New OleDbConnection("Provider=SQLOLEDB;User Id=sa;Password=;Data Source=(local);Initial Catalog=Curso") Comando = New OleDbDataAdapter(Sentencia, Cn) Comando.Fill(DS, "NomTab") GridView1.DataSource = DS.Tables("NomTab").DefaultView GridView1.DataBind() End Sub

Page 24: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

110

Ordenar Datos de una Base de Datos de SQL

Un requisito común de cualquier cuadrícula radica en la capacidad de ordenar los datos que contiene. Mientras que el control DataGrid no ordena explícitamente los datos, proporciona una forma de llamar a un controlador de eventos cuando el usuario hace clic en un encabezado de columna, que se puede utilizar para ordenar los datos.

Coloque los siguientes controles de acuerdo a la siguiente tabla:

Objeto Propiedad Valor GridView ID GridView 1 Formato Automático Simple Configure el GridView como lo hemos efectuado en ejemplo anteriores usando la tabla de participante como a continuación se muestra:

En seguida de clic en la esquina superior izquierda y habilite las opciones de Enable Paging y Enable Sorting, para habilitar el paginado y ordenamiento. Ejecútela y compruebe el funcionamiento:

Page 25: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

111

Creación de Controles Dinámicamente El diseño de una página Web involucra la inserción de controles en tiempo de diseño, sin embargo hay ocasiones en las cuales no es posible determinar el número de controles que usara la página, para remediar esta situación el entorno de Visual Studio .NET brinda un conjunto de contenedores de controles, los cuales proporcionan una serie de funciones para crear la cantidad de controles que necesitemos. Durante el desarrollo de este documento aprenderá cuales son los contenedores de controles, como adicionar controles usando el contenedor panel (a través de un ejemplo práctico) y como leer el valor de cada control. Contenedores de controles Los objetos que tienen la capacidad de incluir varios controles dentro de si son llamados contenedores de controles. En ASP .NET los controles que tienen esa facultad son:

• Panel • Placeholder • Table con sus clases TableRow (fila) y TableCell (columna)

Estos controles se localizan dentro de la barra de herramientas que aparece por defecto en el entorno de Visual Studio .NET. Por la sencillez de programación, el contenedor que se utilizara a lo largo del texto es el control Panel. El siguiente ejemplo muestra como desarrollar una página en ASP .NET que muestre un examen de opción múltiple y que presente las respuestas que selecciono el usuario. Creación de controles en ASP .NET El desarrollo de este ejemplo esta basado en dos tablas, de las cuales se muestra su estructura a continuación:

Después de crear las tablas, se procede a insertar información en la tabla de pregunta y luego a generar las respuestas para cada pregunta relacionada. Para llevar a cabo esta actividad, crearemos un proyecto de aplicación Web ASP .NET, al cual llamaremos CtrlDinamicos. En este adicionaremos los siguientes controles:

Control Propiedad Valor Button Text Mostrar respuestas Panel Dar un clic Eliminar el texto “Panel” Panel Dar un Clic Eliminar el texto “Panel”

Page 26: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

112

El diseño de la página quedara como la siguiente figura:

Se deberán agregar las siguientes importaciones en modo All:

Imports System.Data.OleDb Imports System.Data

Se deberá declarar las siguientes variables a nivel pagina Web: Dim Cn As OleDbConnection Dim i As Integer Dim lblPreg As Label Dim rblResp As RadioButtonList

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Cn = New OleDbConnection("Provider=SQLOLEDB;User Id=sa;Password=;Data Source=(local);Initial Catalog=Curso;") LlenarDatos(lblPreg, rblResp) End Sub Private Sub LlenarDatos(ByVal lbl As Label, ByVal rbl As RadioButtonList) Dim Ds As New DataSet Dim RegPreg, RegResp As DataRow Dim AdaptPreg As OleDbDataAdapter Dim AdaptResp As OleDbDataAdapter Dim i As Integer Dim s As String AdaptPreg = New OleDbDataAdapter("Select IdPregunta,Pregunta from Pregunta", Cn) AdaptPreg.Fill(Ds, "Pregunta") For Each RegPreg In Ds.Tables("Pregunta").Rows i += 1 lbl = New Label rbl = New RadioButtonList Dim Ds1 As New DataSet lbl.Text = "<BR>" & " " & RegPreg(0) & ". " & RegPreg(1) Panel1.Controls.Add(lbl) AdaptResp = New OleDbDataAdapter("Select IdRespuesta,Respuesta from Respuesta where IdPregunta=" & RegPreg(0) & "", Cn) AdaptResp.Fill(Ds1, "Respuesta") For Each RegResp In Ds1.Tables("Respuesta").Rows rbl.Items.Add(New ListItem(RegResp(1), RegResp(0))) s += Regresp(1) Next Panel1.Controls.Add(rbl) Ds1.Dispose() Next RegPreg End Sub Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim RadioBoton As RadioButtonList Dim label As Label Dim j As Integer For i = 2 To Panel1.Controls.Count - 1 Step 2 RadioBoton = Panel1.Controls(i) For j = 0 To RadioBoton.Items.Count - 1 If RadioBoton.Items(j).Selected = True Then label = New Label label.Text = RadioBoton.SelectedItem.Value & ". " & RadioBoton.SelectedItem.Text & "<BR>" Panel2.Controls.Add(label) End If Next Next End Sub

Page 27: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

113

Concluida la inserción de código se procede a ejecutar la página y el resultado que mostrara será como el siguiente:

Page 28: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

114

Utilización de Reportes Gran parte de las aplicaciones necesitan evaluar información obtenida de uno o varios orígenes de datos mediante procesos realmente complejos, con el fin de brindar un resultado capaz de ser comprendido por un usuario final. Si bien el nuevo modelo de impresión podría ser el elegido para esta tarea, existe una tecnología aún más acorde, la cual permite establecer los procesos de obtención, análisis y publicación, en forma realmente sencilla. Este tipo de características se gestionan en Visual Basic desde ya hace bastante tiempo a través de los módulos de informe. Un módulo de este tipo establece los diferentes procesos que se le deberán realizar a un conjunto de datos. Antes de conocer más acerca de ellos, vamos a realizar una breve reseña sobre los cambios que éstos han experimentado en los últimos años. En la versión 3.0 de Visual Basic, Microsoft decidió incluir e integrar al generador de informes de la empresa Crystal Reports (ahora llamada Crystal Decisions) como parte del producto, debido a la alta demanda que este tipo de tareas requerían. En la versión 6.0 del producto, la compañía decidió excluir el mismo, adicionando su propia versión de generador de informes, el cual era realmente deficiente. Si bien era posible realizar tareas básicas sobre un conjunto de datos, no contaba con mayores posibilidades, y las opciones de integración con aplicaciones para Web eran realmente acotadas. Nuevamente en Visual Basic .NET el generador de informes de Crystal Decisions es incluido como tecnología nativa de la infraestructura .NET. Sin embargo, la misma no debe ser tomada como una simple herramienta para procesar datos y generar documentos, ya que el alcance de sus funcionalidades es realmente sorprendente. Ahora se cuenta con tres medios a través de los cuales los informes pueden ser publicados:

- Aplicaciones para Windows. - Páginas de servidor activo ASP.NET. - Servicios Web ASP.NET.

El primer tipo es el ya conocido, el cual envía el resultado de un informe a una ventana de vista preliminar de Windows. Para comprender las restantes opciones, es necesario estar al tanto de las demás funcionalidades provistas por la herramienta, las cuales veremos a continuación. Cuando se genera un informe para una aplicación, en general el proceso que confecciona el mismo y la vista previa son ejecutados dentro de la misma computadora. Esto es cierto en la mayor parte de los casos, pero, sin embargo, existen nuevas opciones del producto que marcan una diferencia sustancial con respecto a esta aproximación. Ahora es posible crear y hacer uso de informes desde una aplicación Web, a los efectos de que ellos puedan ser visualizados desde cualquier explorador que utilice los protocolos y formatos estándares de Internet (http, html, etc.). Para dicho fin, Crystal provee un conjunto de clases y un control Web para visualizar un informe, a los efectos de que los mismos puedan ser accesibles desde las diferentes páginas de servidor activo ASP.NET. Veremos más adelante que es igual de sencillo crear uno de estos para una aplicación Windows que para una aplicación Web. A continuación veremos las funcionalidades básicas de la elaboración de un informe para una aplicación para Windows, y luego aprenderemos más sobre aplicaciones Web. Creando un Informe que utilice OLE DB. Antes de comenzar a explicar sobre cómo crear un informe para una aplicación para Windows, es importante que conozca que Visual Basic instala una carpeta llamada Samples debajo del directorio Cristal Report, la cual contiene varios ejemplos sobre este tema. Bien, ahora vamos a crear un nuevo proyecto de aplicación para Windows, y será el encargado de obtener todos los Participantes por Ciudad y agruparlos por dicho criterio.

Una vez creado el mismo, haremos clic derecho sobre el Explorador de soluciones, y luego Agregar – Agregar nuevo elemento. Esto abrirá la caja de diálogo similar a la Figura anterior, que nos permitirá agregar un nuevo módulo de informe. Vamos ahora a seleccionar al elemento Crystal Report, para posteriormente cambiarle el nombre del mismo a Participante.rpt, y por último hacer clic en aceptar para adicionar el mismo al proyecto.

Page 29: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

115

Inmediatamente después de que un módulo de informe es adicionado al proyecto, la ventana de diálogo denominada Galería de Crystal Reports será exhibida, a los efectos de que sea posible especificar en forma sencilla el tipo de documento a elaborar. El mismo ofrece las siguientes opciones:

- Crear un documento mediante el Asistentes de informes. - Crear un informe en blanco. - Crear un nuevo informe a partir de un informe existente.

A su vez, el control de lista situado en la parte inferior hace posible seleccionar el tipo de asistente, a los efectos de adecuar los posteriores pasos del mismo. Para este ejemplo crearemos un informe utilizando la primera opción mediante el Asistente de informes, y haremos uso de la plantilla por defecto (estándar). El mismo nos guiará a través de diferentes ventanas, las cuales harán posible especificar la información del origen de datos, los campos a incluir en el mismo, los diferentes proceso a efectuar, etc. Una vez indicadas las opciones tendremos que hacer clic en Aceptar, lo cual exhibirá la primera página del asistente. Una ventana similar a la de la siguiente figura nos solicitará que especifiquemos el origen o fuente del cual deseamos obtener los datos para confeccionar el informe. Ventana del asistente, presionar el botón de aceptar:

La siguiente ventana se muestra, para que seleccionemos la base de datos:

Como es posible apreciar, el número de opciones de conectividad es realmente elevado. Emplearemos la base de datos Base, y dependiendo del origen de la misma, será el proveedor que tendrá que seleccionar.

Page 30: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

116

La siguiente ventana –similar a la siguiente figura - nos solicitará información sobre cómo deberá ser establecida la conexión. Existen dos posibles opciones de autenticación, la primera es utilizando los usuarios definidos en Windows (Seguridad Integrada), mientras que la segunda es empleando aquellos definidos en SQL Server (o Windows). Esta última es de gran utilidad cuando se desea conectar al motor de datos desde ambientes no-Windows, lo cual no es el caso que nos ocupa en este momento. Debido a ello, haremos clic en Seguridad Integrada, a los efectos de que se empleen los privilegios del usuario actual. Por supuesto que es necesario que el mismo cuente con derechos para poder acceder a la base de Base. Por último, debemos especificar el nombre del equipo, o (local) si el servidor se encuentra en forma local, y luego indicar Base en la lista de Bases de datos.

Este bastará para que la conexión a la base pueda ser establecida, por lo que vamos a hacer clic en Finalizar para agregar la conexión a la lista de factibles de utilizar por un informe. El panel de la izquierda ahora exhibirá la conexión al origen Base, y bastará con hacer clic sobre la misma para ver las diferentes tablas y campos ofrecidos por ella. Algo realmente interesante es que un informe podría basarse en datos de diferentes orígenes, sin que esto influyera en la complejidad de los procesos posteriores. Vamos entonces a expandir Base, luego dbo, y por último Tablas, a los efectos de acceder a las tablas de la conexión. Para este informe necesitaremos agregar a Ciudad, Participante ya que, si recuerda, el objetivo original era el de exhibir todos los Partcipantes, agrupados por su respectiva Ciudad, y son éstas las tablas que proveen la información necesaria para este proceso. Para ello, basta con seleccionar las mismas y luego hacer clic en Insertar Tabla, lo que dará un resultado similar al de la siguiente figura:

Page 31: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

117

Las tablas que se involucrarán en el proceso son ahora incluidas en la lista de la derecha con tablas del informe, lo que indica que serán ofrecidas por los demás pasos del asistente. Si vamos a la próxima ventana mediante Siguiente, veremos que los vínculos entre las tablas son automáticamente detectados:

Cuando se establece una conexión, el generador de informes no solamente obtiene la información de campos y tipos, sino también las diferentes relaciones y restricciones de las mismas. Esta información es posteriormente utilizada por el generador de informes para –por ejemplo- indicar un vínculo de tipo principal/detalle. Sin embargo, con algunos orígenes no es posible obtener dicha información, por lo que se brinda la posibilidad de indicar ésta en forma manual. Esto es de gran utilidad en dos situaciones, la primera es cuando se desean establecer vínculos diferentes a los originales, y la segunda cuando se tienen tablas que pertenecen a distintos orígenes de datos, y se desea conformar una relación. Haremos clic en Próximo, a los efectos de obtener una ventana similar al de la siguiente figura:

Page 32: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

118

La misma nos permitirá seleccionar los campos que integrarán el informe. Si recuerda, la idea original era la de exhibir los datos de Ciudades y Participantes, por lo que agregaremos los campos de ambas tablas (Ciudad y Participante). Una vez hecho esto, haremos clic en Siguiente. La siguiente ventana solicita los campos necesarios para ordenar y agrupar las diferentes filas obtenidas del origen. Debido a que deseamos que los diferentes Participantes sean agrupados por su respectiva Ciudad, bastará con que indiquemos el campo NomCiudad de la tabla de Ciudad como elemento agrupador, en forma similar y como exhibe la Figura:

Las próximas ventanas brindan la posibilidad de agregar subtotales gráficos, etc., y no haremos uso de éstos en el ejemplo, por lo que haremos clic en Terminar, lo cual dará como resultado que un nuevo módulo de informe será agregado al proyecto, conteniendo características similares a las de la siguiente figura:

A continuación se describen las cuatro secciones de la figura: A. Explorador de campos. Permite agregar, modificar o eliminar campos del informe, así como también fórmulas. Es posible mostrar u ocultar esta ventana haciendo clic en el menú de la barra principal Ver, luego Otras Ventanas, y por último Esquema del Documento o CTRL.+ALT+T. B. Ventana principal del informe Exhibe el informe con sus campos y demás integrantes. Éste incluye las siguientes secciones:

1. Encabezado del informe.

Contiene aquellos elementos a ser exhibidos al comienzo del informe.

2. Encabezado de página. Aloja aquellos elementos que deberán ser incluidos en las diferentes páginas que integrarán al informe. Generalmente se incluyen en ésta los títulos de los diferentes campos, logotipo de la empresa, número de página, etc.

3. Encabezados de grupo.

C D

A B

Page 33: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

119

Las secciones de este tipo contienen aquellos elementos que deberán ser exhibidos al comienzo de cada grupo, y generalmente se incluye una descripción del mismo. En la aplicación que realizamos anteriormente se incluía al identificador de autor.

4. Detalles.

Las secciones de este tipo contienen las diferentes filas (y campos) que integran el informe.

5. Pie del informe.

Contiene aquellos elementos a ser exhibidos en la hoja final del informe.

6. Pie de página.

Los elementos aquí adicionados serán exhibidos al final de cada página.

C. Barra principal de herramientas del informe Incluye las herramientas necesarias para ordenar, ver las propiedades del objeto seleccionado, etc. D. Barra secundaria de herramientas del informe Incluye las herramientas necesarias para insertar nuevos objetos al informe, así como también agregar nuevos grupos, etc. Las diferentes pautas sobre cómo tendrá que ser obtenida la información y los distintos procesos a realizar sobre ésta han sido guardados en el documento Participante.rpt. Sin embargo, el mismo no mantiene ninguna relación sobre cómo deberá ser exhibido el resultado, ya que éste se remite exclusivamente a almacenar los procesos especificados mediante el asistente. Esto es así con el fin de que un mismo informe pueda ser utilizado para generar su salida a una aplicación para Windows o para Web, sin que se requiera modificaciones, o la creación de informes similares.

Page 34: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

120

Informes en Aplicaciones para la Web La tecnología de informes utilizada en la plataforma .NET y provista por la empresa Crystal Decisions es sumamente flexible, ya que brinda la posibilidad de ser empleada en una aplicación Web en forma similar a una para Windows. La ventaja más importante es que el generador de informes hace uso de los recursos del servidor en vez del de cada cliente. Debido a que los mismos son publicados en formato HTML, el resultado puede ser visto desde cualquier explorador. Como beneficio adicional y debido a que la definición del informe no mantiene vinculación con la forma en la cual éste será presentado un mismo módulo puede ser empleado por una aplicación para la Web y Windows al mismo tiempo, lo que hace muy fácil su reutilización. Vamos ahora a crear un nuevo proyecto de aplicación Web ASP.NET llamado ParticipantesCiu, a los efectos de demostrar las características bajo este modelo. Una vez hecho esto, adicionaremos el reporte llamado Participante.rpt, para el cual seguiremos las mismas pautas que en el informe de Windows. Nuevamente contamos con un archivo con extensión rpt conteniendo los diferentes campos y procesos del informe, pero aún no hemos terminado la forma en que éste se hará disponible. Para que cada página de servidor activo ASP.NET pueda ofrecer el mismo, es necesario emplear el control de visor de informes para formularios Web. Este último se encuentra en la caja de herramientas, generalmente localizado al final de la misma. Dibujaremos entonces el control en forma similar ha como se muestra en la siguiente figura:

El próximo paso será el de vincular la definición del informe con el control Web. Hacemos clic derecho en la esquina superior derecha y entramos a la opción Choose Report Source,y configurarlo como a continuación se muestra:

El resultado final es interesante, ya que adquiriremos en tiempo de diseñó la estructura de campos que tendrá el informe. Ahora solo nos hace falta ejecutarlo quedando de la siguiente manera:

Page 35: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

121

Page 36: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

122

Reportes Usando Report Agregue un nuevo Item y selecciones Report, asignándole el nombre de Participante como se muestra a continuación:

En la siguiente ventana dar clic en el lado izquierdo de la ventana, para adicionar un nuevo origen de datos en Add New Data Source:

En la siguiente ventana seleccione la conexión a la base de datos:

En la siguiente ventana seleccione Next:

Page 37: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

123

En la siguiente ventana seleccione Use SQL Statments y presione Next:

En la siguiente ventana seleccione Quero Builder, para construir el Quero del reporte:

En la siguiente ventana agregue las tablas de participante, ciudad y enseguida presione Close como se muestra:

Page 38: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

124

En la siguiente ventana selecciones los campos que serán mostrados en el reporte y enseguida presione el botón de OK, como a continuación se muestra:

Enseguida se muestra la ventana con el Query y presionaremos Next:

En la siguiente ventana presione Next:

Page 39: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

125

En esta ultima ventana presionaremos Finish:

La siguiente ventana muestra el resultado:

En el Toolbox seleccionaremos el control Table sobre el Reporte participante.rdlc y arrastramos los campos a las columnas de ella, en el renglón de en medio como se muestra a continuación:

Page 40: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

126

Enseguida agregaremos una página Web y agregaremos el control ReportViewer del ToolBox en la sección Data, como se muestra a continuación:

Daremos clic en la esquina superior derecha del ReportViewer para seleccionar el reporte, como a continuación se muestra:

Page 41: Grid View ASP 2005

[email protected] I.S.C. Alejandro Guzmán Zazueta

127

En este punto ya puede ejecutar la página Web, que se muestra a continuación:

Materia Desarrollado por: ISC Alejandro Guzmán Zazueta Maestro de Tecnologico de Roque, Celaya, Gto. [email protected]

GRACIAS