lunes, 1 de febrero de 2010

Nuevos Controles de Reportes en VS 2005

1. Introducción

El tema de este artículo son los nuevos Controles para Reportes en Aplicaciones Windows. Con VS 2005 tenemos nuevos controles; uno de ellos, el ReportViewer, posee funcionalidades muy útiles para elaborar reportes profesionales, ricos en información y basados en Reporting Services. En este artículo veremos las dos formas que ofrece VS 2005 para visualizar un reporte con el control ReportViewer: creando el reporte en VS 2005, o bien usando un reporte de la web.

2. Modelos de Uso de Reportes

Existen dos modelos a tener en cuenta al momento de presentar un reporte con el control ReportViewer: Server Mode y Local Mode. La Figura 1 muestra estos dos modelos:
Bb972260.art252-img01-400x242(es-es,MSDN.10).jpg

Figura 1.
La base del primer modelo es tener un Web Service que procese los requerimientos y genere el reporte. Usamos VS para publicar el reporte en la aplicación. Podemos ver que en este modelo es el Web Service el que hace la consulta al servidor de base de datos; Visual Studio permite recuperar el RDL para poder enlazarlo a Control Report Viewer, al que sólo usaremos como visor; es decir, no podremos editar nada, usaremos el mismo reporte que está en el servidor. Este modelo es el más sencillo en cuanto a pasos, ya que solo tenemos que darle la ruta del reporte en la Web.
El segundo modelo, por el contrario, es mucho más simple en cuanto a su estructura, pero más detallado en los pasos para la creación y visualización del reporte. Con este modelo tenemos que hacer todo desde cero, y por ende podremos personalizarlo mejor según cuales sean nuestras necesidades. En este modelo, el que se conecta a la base de datos es el DataSet; éste recupera los datos que servirán para crear nuestro reporte. En este caso el reporte lo creamos dentro de VS; hacemos la creación y publicación con Visual Studio.

2.1. Modelo con Reporte Externo (Server Mode)

Para poder usar este modelo primero deberemos ubicar el sitio web del cual consumiremos el reporte con Visual Studio. En este caso, usaremos los ejemplos que vienen con la base de datos Adventure Works, los cuales están instalados en mi servidor web local. Es necesario revisar previamente los anexos sobre cómo instalar los ejemplos para poder usar los reportes. La Figura 2 muestra uno de los varios reportes que trae AdventureWorks como ejemplo, Product Line Sales:
Bb972260.art252-img02-459x344(es-es,MSDN.10).jpg

Figura 2: http://localhost/Reports.
Este reporte será nuestro reporte de servidor, del cual alimentaremos a nuestro ReportViewer usando Visual Studio.
Vamos a la práctica: Crearemos un nuevo proyecto Windows. Para esto, agregaremos dos formularios adicionales al proyecto: uno para el Server Mode y otro para el Local Mode. Agregaremos el control ReportViewer (está dentro del grupo Data) al formulario frmReportServerMode para poder visualizar los datos recuperados desde la web (Ver Figura 3):
Bb972260.art252-img03-570x372(es-es,MSDN.10).gif

Figura 3: ReportViewer.
En el ReportViewer Tasks, en Choose Report, seleccionaremos <server mode>; a continuación, aparecerán dos nuevas opciones:
  • Report Server Url: aquí colocaremos el nombre de nuestro servidor más la carpeta ReportServer:
    "http://localhost/reportserver$DB2005". En este caso corro bajo localhost y agrego $DB2005, pues tengo mi SQL 2005 en la instancia DB 2005.
  • Report Path: En esta casilla colocaremos la ruta absoluta de nuestro reporte en base a nuestro servidor que tiene los reportes: "/AdventureWorks Sample Reports/Product Line Sales".
Una vez hecho todo esto, haremos clic sobre: Dock in parent container, para hacer que nuestro ReportViewer llene todo el formulario. Luego solo ejecutaremos, recordando agregar un botón al formulario principal para llamar al frmReportServerMode. Al ejecutar la aplicación e ir al ReportServerMode, deberemos visualizar algo como lo que se muestra en la Figura 4):
Bb972260.art252-img04-550x435(es-es,MSDN.10).jpg
Figura 4: ReportViewer (Server Mode).

2.2. Modelo con Reporte Propio

Esta es la otra opción que nos ofrece el ReportViewer; en los casos en que un reporte no se adecúe a la vista que deseemos, lo creamos desde cero. Con este modelo tenemos que hacer todo el diseño del reporte. Lo único necesario para logra esto es tener un Data Source. A partir del Data Source y un Item Reporyt.rdlc crearemos el reporte, el cual después podremos visualizar con el control ReportViewer.
El primer paso es crear un nuevo formulario con el nombre de frmReportLocalMode. Luego agregaremos nuevamente un control ReportViewer (no debes seleccionar nada aún, solo agregarlo). Crearemos un nuevo Data Source en la ventana Data Source, tal como se muestra en la Figura 5:
Bb972260.art252-img05-570x329(es-es,MSDN.10).jpg
Figura 5: Nuevo Data Source.
Seleccionaremos DataBase y se nos presentará un Wizard o asistente, el cual nos pedirá crear una conexión; podremos usar la existente o bien crear una nueva; crearemos una nueva conexión para la base datos AdventureWorks (Ver Figura 6):
Bb972260.art252-img06-570x392(es-es,MSDN.10).gif
Figura 6: Nueva conexión.
Una vez creada la conexión se nos preguntará si deseamos almacenar la cadena de conexión en el archivo de configuración de la aplicación; le responderemos que sí. Posteriormente tendremos que seleccionar la tabla o las tablas que usaremos y las columnas respectivas; en este caso seleccionaremos la vista vEmployee; luego de hacer esto se nos aparecerá un nuevo Data Source con todas las filas disponibles en la ventana Data Source (Ver Figura 7):
Bb972260.art252-img07-224x373(es-es,MSDN.10).jpg
Figura 7: Data Source disponibles.
Una vez que ya tengamos un Data Source en nuestro proyecto, vamos a crear nuestro reporte para lo cual agregamos un nuevo ítem a nuestra aplicación tipo Report (Ver Figura 8):
Bb972260.art252-img08-570x344(es-es,MSDN.10).jpg
Figura 8: Agregar Report.
Al agregar un nuevo report se nos aparecerá una hoja cuadrícula en blanco; para llenar esta hoja debemos expandir el ToolBox para poder ver los nuevos controles disponibles para reportes, entre los cuales tendremos Table, Matrix, TextBox, y otros más. Hay que recalcar que este TextBox se asemeja más a un Label para los desarrolladores que están acostumbrados a trabajar con estas etiquetas. Posteriormente agregaremos los controles deseados; nos iremos a la ventana Data Source para arrastrar y soltar los campos deseados. Una vez que los campos estén dentro del reporte, le podremos dar los formatos que nosotros queramos: Color, Estilo, etc., estas opciones las encontraremos en la barra de herramientas, pero lo que también podríamos hacer es agregar condiciones al color usando fórmulas; es decir, que las primeras diez filas sean de color azul y el resto, hasta cierta fila, de color rojo; ésta es una opción muy interesante. En este caso agregaremos un control Table y arrastraremos 3 campos del Data Source, Employee, y luego le daremos el formato que deseemos (Ver Figura 9):
Bb972260.art252-img09-570x325(es-es,MSDN.10).jpg
Figura 9: Creando y formateando el reporte.
Una vez creado nuestro reporte y su estilo, solo nos resta ir a nuestro ReportView y enlazarlo a nuestro Reporte creado (Ver Figura 3); una vez en Choose Report, aparecerá nuestro reporte creado como opción, el cual seleccionaremos. Luego, solo restará ejecutar nuestra aplicación. No debes olvidarte de agregar el código al botón para enlazar su formulario principal a este nuevo form. Se adjunta el código por si lo quieres consultar; éste iría dentro del evento clic del botón:

///llamando al reporte uno
   frmReportLocalMode frm = new frmReportLocalMode();
 
///llamando al frm
   frm.WindowState = FormWindowState.Maximized; //maximizar el formulario
   frm.ShowDialog(); 

Al ejecutar nuestra aplicación podremos visualizar el reporte que se muestra en la Figura 10:
Bb972260.art252-img10-487x484(es-es,MSDN.10).jpg
Figura 10: Reporte creado desde cero .
Nota que al enlazar nuestro ReportView al reporte creado (*.rdlc) se agregarán 3 controles a nuestro formulario: un DataSet, un BindingSource y un DataAdapter; y si vemos el código del formulario, se habrá generado el siguiente código en el evento load, del formulario:

private void frmReportLocalMode_Load(object sender, EventArgs e)
   {
   /// TODO: This line of code loads data into the 'AdventureWorksDataSet.vEmployee' table. You can move, or remove it, as needed.
   this.vEmployeeTableAdapter.Fill(this.AdventureWorksDataSet.vEmployee);
 
this.reportViewer1.RefreshReport();
   }

3. Cómo instalar Ejemplos de la Base de Datos AdventureWorks en SQL 2005

SQL 2005 no trae por defecto ninguna base de datos: tenemos pues que instalar una. Existe una que se está lanzando ahora y es AdventureWorks; al instalar esta base de datos nos creará las tablas, vistas, procedimientos, y datos. Adicionalmente, podremos instalar ejemplos tales como, los Reportes para Adventure Works, los cuales hemos usado en este artículo. 
El archivo que más nos interesa es SqlServerSamples.msi. Al ejecutar este archivo le daremos la ruta donde tendremos instalado nuestro SQL para que instale los ejemplos. Luego iremos a la carpeta donde está instalado nuestro SQL 2005 y entraremos en la siguiente ruta: "\90\Samples\Reporting Services\Report Simples\AdventureWorks Sample Reports\"; en esta carpeta encontraremos un archivo de solución, el cual abriremos con Visual Studio 2005. Luego sólo resta compilar y construir la aplicación, verificando antes que el servicio de Reports de SQL 2005 esté iniciando en el IIS; de más está decir que si bien VS 2005 no necesita de IIS, con el objeto de probar las aplicaciones web éste debe ser instalado para usar Reporting Services o bien para llevar a producción una aplicación web. Al momento de compilar nuestra aplicación, puede darse un error; esto puede ocurrir debido al nombre de nuestro Host: si tienes una instancia de SQL, tienes que tener mucho cuidado con esto. Luego abriremos el localhost, más la carpeta Reports; en otras palabras: "http://localhost/Reports", siempre y cuando no haya instancia; si estás trabajando con una instancia de SQL, usa: "http://localhost/Reports$nameInstace".

No hay comentarios:

Publicar un comentario