Usando el control ReportViewer en ASP.NET 2.0
Autor:Eve Cole
Fecha de actualización:2009-07-01 16:43:40
Traducción de este artículo: webabcd
introducir
Un requisito común para cualquier aplicación basada en datos son los informes. Sin embargo, esta característica tan importante no se nos proporciona en ASP.NET 1.x. Afortunadamente, sin embargo, el control ReportViewer que viene con .NET 2.0 puede satisfacer algunas de sus necesidades básicas de informes. Le mostraré cómo usar este control en este artículo. El control ReportViewer se puede utilizar tanto en programas web como en programas de Windows. Aquí, solo presentaré cómo usarlo en programas web.
Ejemplo de informe
Asumimos que queremos generar una lista de información del cliente como se muestra a continuación:
El informe anterior es una lista muy simple de información de clientes agrupada por país. Los datos para el informe se obtienen de la tabla Clientes de la base de datos Northwind. De forma predeterminada, muestra toda la información del cliente. Sin embargo, también puede hacer que muestre información sobre los clientes que pertenecen a un país que usted especifique.
El informe se diseña utilizando el control ReportViewer, que puede obtener datos de un DataSet fuertemente tipado o de una colección de objetos personalizados. En el desarrollo de programas reales, a menudo utilizamos una arquitectura de tres niveles y los datos obtenidos suelen ser un conjunto de datos o una colección genérica obtenida de la capa empresarial. Aquí, planeo utilizar una colección genérica como fuente de datos en lugar de un conjunto de datos fuertemente tipado.
Crear biblioteca de clases
Primero, abra Visual Studio y cree un proyecto de biblioteca de clases llamado ReportViewerLib. Agregue una clase llamada Cliente como se muestra a continuación:
usando Sistema; usando System.Data; usando System.Configuration; usando System.Data.SqlClient; usando System.Collections.Generic; espacio de nombres ReportViewerLib { clase públicaCliente { cadena pública strCustomerID; cadena pública strCompanyName; cadena pública strContactName; cadena pública strPaís;
cadena pública ID de cliente { conseguir { devolver strClienteID; } colocar { strClienteID = valor; } }
cadena pública Nombre de la empresa { conseguir { devolver strCompanyName; } colocar { strCompanyName= valor; } }
cadena pública Nombre de contacto { conseguir { devolver strNombreContacto; } colocar { strContactName= valor; } }
cadena pública país { conseguir { devolver strPaís; } colocar { strPaís= valor; } }
Lista estática pública |
GetCustomersForCountry(país de cadena) { SqlConnection cnn=nueva SqlConnection( ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); SqlCommand cmd=nuevo SqlCommand(); cmd.Conexión=cnn; cmd.CommandText="seleccionar ID de cliente, nombre de empresa, nombre de contacto, país de clientes donde país=@país"; SqlParameter p=nuevo SqlParameter ("@país",país); cmd.Parameters.Add(p); cnn.Open(); Lector SqlDataReader = cmd.ExecuteReader(); Lista |
(); mientras (lector.Read()) { Cliente c = nuevo Cliente(); c.CustomerID = lector.GetString(0); c.CompanyName = lector.GetString(1); c.ContactName = lector.GetString(2); c.País = lector.GetString(3); lista.Agregar(c); } cnn.Cerrar(); lista de devolución; }
Lista estática pública |
Obtener todos los clientes() { SqlConnection cnn = nueva SqlConnection ( ConfigurationManager.ConnectionStrings ["NorthwindConnectionString"].ConnectionString); SqlCommand cmd = nuevo SqlCommand(); cmd.Conexión = cnn; cmd.CommandText = "seleccionar ID de cliente, nombre de empresa, nombre de contacto, país de los clientes"; cnn.Open(); Lector SqlDataReader = cmd.ExecuteReader(); Lista |
(); mientras (lector.Read()) { Cliente c = nuevo Cliente(); c.CustomerID = lector.GetString(0); c.CompanyName = lector.GetString(1); c.ContactName = lector.GetString(2); c.País = lector.GetString(3); lista.Agregar(c); } cnn.Cerrar(); lista de devolución; }
} }
|
La clase Cliente define cuatro propiedades públicas, a saber, CustomerID, CompanyName, ContactName y Country. Después de eso, hay dos métodos estáticos contenidos en esta clase: GetCustomersForContry() y GetAllCustomers(). Estos dos métodos son relativamente simples: uno devuelve toda la información del cliente perteneciente a un determinado país y el otro devuelve toda la información del cliente. Primero abra la conexión a la base de datos Northwind y luego ejecute la consulta SELECT a través del objeto SqlCommand. Después de eso, use el objeto SqlDataReader para obtener los datos. Recorra este objeto SqlDataReader, cree un objeto Cliente cada vez dentro de él, luego establezca sus diversas propiedades y finalmente agréguelo a la colección genérica de objetos Cliente. Al final de la clase, la colección genérica de objetos Cliente se devuelve a la persona que llama.
Crear fuente de datos
Al diseñar un informe, debe especificar una fuente de datos en su proyecto. Para agregar una fuente de datos a su proyecto, puede hacerlo seleccionando el menú Datos -> Agregar nueva fuente de datos. Luego aparecerá el cuadro de diálogo que se muestra a continuación:
Su fuente de datos puede ser una base de datos, un servicio web o un objeto. En este caso seleccionamos Objeto. Luego haga clic en el botón "Siguiente" y aparecerá una interfaz para que seleccionemos una fuente de datos. Elegimos la clase Cliente (como se muestra en la siguiente figura).
Haga clic en el botón "Finalizar" para completar el asistente de configuración de la fuente de datos. De esta manera, ha agregado una nueva fuente de datos a su biblioteca de clases. Si desea ver la fuente de datos, puede hacerlo. Seleccione el menú "Datos" -> Mostrar fuente de datos y aparecerá la interfaz que se muestra a continuación:
Informes de diseño
Luego agregue un informe. Haga clic derecho en el proyecto y seleccione "Agregar nuevo elemento". Seleccione "Informe" en el cuadro de diálogo y haga clic en el botón "Agregar" (como se muestra en la siguiente figura). De esta forma hemos agregado un archivo llamado "Report1.rdlc". El archivo .rdlc es un archivo de informe que guarda el diseño del informe y la asignación de datos.
Una vez que abra el archivo Report1.rdlc, se mostrará un conjunto de controles relacionados con el informe en la caja de herramientas de Visual Studio (como se muestra a continuación).
Entre estos controles, el control "Cuadro de texto" y el control "Tabla" se utilizan con mucha frecuencia. El control "Cuadro de texto" se utiliza para mostrar un fragmento de texto estático o una expresión. El control "Tabla" se utiliza para mostrar datos tabulares y los resultados generados por él se mostrarán en el "cuerpo" de su informe.
El informe diseñado se muestra a continuación:
Al principio de la sección "Encabezado" del informe, hay un cuadro de texto cuya propiedad Valor es "Listado de clientes". Hay otro cuadro de texto debajo de este cuadro de texto y el valor de su propiedad Valor es "=Parameters!SubTitle.Value". Lo que significa es que el valor del cuadro de texto proviene del parámetro denominado Subtítulo. ¿Cómo definimos los parámetros? Esto requiere agregar parámetros en la propiedad ReportParameters del informe. El cuadro de diálogo de parámetros de informe abierto se muestra en la siguiente figura:
Tenga en cuenta: la configuración de los parámetros se realiza en nuestro código .NET.
Si desea mostrar la fecha en el informe, simplemente establezca la propiedad Valor del cuadro de texto correspondiente en "=FormatDateTime(ToDay(),DateFormat.ShortDate)". Una de las grandes ventajas de los informes es que tienen muchas funciones integradas, como ToDay() y FormatDateTime. En este ejemplo, utilizamos la función FormatDateTime() para mostrar la fecha actual (ToDay()) en formato ShortDate.
Ahora, arrastre un control "Tabla" desde la caja de herramientas a su informe. Por defecto, el control "Tabla" tiene 3 filas y 3 columnas. Las 3 filas son: encabezado de tabla, información detallada y pie de página. Por supuesto, también puede agregar filas y columnas al control Tabla. Arrastre las propiedades CustomerID, CompanyName, ContactName y Country desde la ventana de origen de datos a la fila de detalles de su control Tabla. De esta manera, el sistema agregará automáticamente un cuadro de texto y establecerá sus propiedades en =Fields!CustomerID.Value, =Fields!CompanyName.Value, etc. En este punto, los encabezados de las columnas también se agregarán automáticamente. Por supuesto, también podrás realizar las modificaciones que necesites según tus necesidades.
A continuación queremos agrupar los registros por el país al que pertenece el cliente. Haga clic derecho en el borde de la fila de detalles y seleccione Insertar grupo (como se muestra en la imagen a continuación).
Luego aparecerá el cuadro de diálogo que se muestra a continuación:
En la pestaña "Ordenar", seleccione "=Campos!País.Valor" como expresión y "Ascendente" como dirección de clasificación.
Esas son las cosas, muy simples. De esta forma hemos completado el diseño del informe.
Mostrar informe
Cree un nuevo sitio web llamado "ReportViewerDemo". Agregue una referencia al ensamblado ReportViewerLib para que el ensamblado se copie en el directorio BIN de su sitio web. Después de eso, agregue el archivo Report1.rdlc a su sitio web. Arrastre un control ReportViewer en la pestaña "Datos" de la caja de herramientas a su página Default.aspx, abra el panel de etiquetas inteligentes del control ReportViewer y seleccione Report1.rdlc en el cuadro desplegable "Seleccionar informe", como se muestra en la figura a continuación:
Después de seleccionar el archivo de informe, el sistema agregará automáticamente un control de fuente de datos de objeto con la propiedad TypeName como Cliente. Puede verificar esto en el asistente de configuración del control de fuente de datos del objeto.
A continuación, arrastre un control DropDownList al encabezado de la página y establezca cuatro opciones: Todo, EE. UU., Reino Unido y Brasil. También establezca su propiedad AutoPostBack en True. Luego, abra el asistente de configuración del control de fuente de datos y configure la operación "SELECCIONAR" en el método SelectCustomersForCountry().
Establezca el parámetro de país del método SelectCustomersForCountry() en SelectedValue de DropDownList1.
De forma predeterminada, toda la información del cliente se muestra en el informe. Cuando selecciona un país en DropDownList, la información del cliente perteneciente al país que seleccionó se mostrará en el informe. Para completar dicha función, solo necesitamos manejar el evento SelectedIndexChanged de DropDownList.
vacío protegido DropDownList1_SelectedIndexChanged (remitente del objeto, EventArgs e) { si (DropDownList1.SelectedValue == "Todos") { ObjectDataSource1.SelectMethod = "GetAllCustomers"; ObjectDataSource1.SelectParameters.Clear(); Parámetro ReportParameter = nuevo ReportParameter ("SubTítulo", "Lista de todos los clientes"); ReportParameter[] p ={ parámetro }; ReportViewer1.LocalReport.SetParameters(p); } demás { ObjectDataSource1.SelectMethod = "GetCustomersForCountry"; ObjectDataSource1.SelectParameters[0].DefaultValue = DropDownList1.SelectedValue;
Parámetro ReportParameter = nuevo ReportParameter ("Subtítulo", "Lista de clientes de un país"); ReportParameter[] p ={ parámetro }; ReportViewer1.LocalReport.SetParameters(p); } } |
Este código primero verifica la propiedad SelectedValue del control DropDownList. Si es "Todos", establezca la propiedad SelectMethod del control de origen de datos en GetAllCustomers. Además, también debemos borrar la colección SelectParameters porque el método GetAllCustomers() no requiere ningún parámetro. A continuación, creamos una instancia de la clase ReportParameter y configuramos el nombre y el valor del parámetro del informe en su constructor. Recuerde los parámetros que definimos al diseñar el informe. Luego cree una matriz ReportParameter. Llame al método SetParameters() con esta matriz como parámetro. El bloque de código "else" también es muy simple, es decir, el método utilizado se convierte en GetCustomersForCountry().
Esas son las cosas, muy simples. El informe ha sido completado. Puede ejecutar la página Default.aspx para ver el efecto. Tenga en cuenta que el control ReportViewer tiene funciones de exportación integradas, que le permiten exportar informes a formato Excel o PDF. El control ReportViewer también tiene muchas propiedades, puede explorarlas usted mismo.
Resumir
El control ReportViewer de ASP.NET proporciona muchas funciones básicas de informes. En este artículo, utilizamos el control de fuente de datos del objeto para desarrollar un informe. Creamos una biblioteca de clases y una fuente de datos. Finalmente, use el control ReportViewer para mostrar el informe.