martes, 10 de abril de 2018

Cómo generar un reporte con parámetros y pasarlos a Report Viewer (Visual Studio 2015 + SQL Server 2012)


En esta entrada les muestro los pasos para crear un reporte con parámetros y cómo pasarlos de los TextBox del formulario a Report Viewer,  utilizando  Visual Studio 2015 y SQL Server 2012.

Esta es la forma más cómoda y sencilla que he descubierto para trabajar con parámetros y espero que les pueda ser útil.

Para este ejemplo deberás crear una tabla llamada Ventas con la siguiente estructura e información:




A partir de esta tabla genera un procedimiento almacenado (SP) llamado reporteventas, el cual será el encargado de recibir los parámetros de tipo fecha y recopilar la información que deseamos plasmar en el reporte.


Observa que he creado dos variables de tipo Date (FechaInicial y FechaFinal) las cuales, al ejecutar el SP harán referencia al campo Fecha de la tabla Ventas.


Es importante que te asegures de que el SP funciona:


Ahora pasemos a nuestro proyecto en Visual Studio.

Tengo creado un formulario con los siguientes controles:

Dos label, dos DateTimePicker y un botón desde el cual se imprimirá el reporte.


El siguiente paso será agregar el diseñador de reporte de Report Viewer. Para ello, agrega un nuevo ítem al proyecto y da clic en Reporting/Report y asígnale un nombre, para este ejemplo lo he llamado DiseñoReporte.

Nota: Si no te aparece la presente opción es necesario que corras el ejecutable de Visual Studio e instales  DataTools.


Posteriormente se mostrará el diseñador de reportes de Report Viewer.

El primer paso es configurar un origen de datos, es decir, indicarle desde qué instancia, base de datos y tabla (En nuestro caso SP) deberá traer la información.

Da clic derecho sobre Datasets/Add Dataset, si el diseñador detecta que aún no tienes configurado un origen de datos (Como en este ejemplo) solicitará que configures uno.



Se mostrará la siguiente ventana donde hay que seleccionar el origen de datos, en este caso es DataBase/Next.




En el siguiente apartado indica el nombre de la instancia de SQL/ credenciales de autenticación por SQL, así como el nombre de la base de datos de la cual se consultará la información.


Selecciona la base de datos:


Luego se mostrará la estructura de la base de datos seleccionada (Tablas, Vistas, SP, Funciones). 

Selecciona Stored Procedures/y marca el SP creado inicialmente. Por último es necesario asignar un nombre al origen de datos.




Si has seguido los pasos hasta aquí, tendrás una vista del origen de datos.  Para este ejemplo el SP y los respectivos campos que lo conforman.




De lado izquierdo se mostrará esta misma información para poder utilizarla en el diseñador del reporte.




El siguiente paso, es comenzar a dar forma al reporte que se presentará.

Agrega los parámetros (Parameters/Add Parameter) que en este caso serán la fecha inicial y fecha final y asígnales un nombre.


Una vez capturados los parámetros, selecciónalos y arrástralos hasta el diseño del nuevo reporte como se muestra en la imagen.



Agrega una tabla al diseño del reporte que es donde se mostrarán los datos que contiene el DataSet.

Una vez que se agrega posiciónate sobre el lado derecho de cada celda para seleccionar el campo que deseas se muestre en cada espacio, como se muestra en la imagen.



Si lo prefieres también puedes agregar una fila para mostrar totales de las columnas.


Una vez que el diseño del reporte esté listo, pasemos al formulario desde el cual se capturarán los parámetros y se mostrará la información del reporte.


En el formulario es necesario agregar un elemento de tipo ReportViewer. Una vez agregado, en la esquina superior derecha deberás seleccionar el formato de reporte (.rdlc) que se creó anteriormente. 


Una vez seleccionado el reporte, es importante verificar que en la parte inferior del formulario se agreguen automáticamente el DataSet, BindingSource y el TableAdapter con el nombre del SP.


Ahora pasemos al código del formulario. Observarás que de forma automática se agregaron dos líneas de código en el evento load del mismo. Es necesario pasarlas al evento click del botón.

La primer línea es la encargada de recibir los parámetros y pasárselos al DataSet para que éste se encargue de traer la información que ocupamos visualizar. Inicialmente marca un error en Fill, esto se debe a que aún no le hemos indicado de qué campos deberá tomar los valores de los parámetros que ocupa el SP.


El código, ya con campos de parámetros incluidos deberá quedar de la siguiente forma:



Entre las dos líneas de código anteriores he codificado la forma como se deberá pasar el rango de fecha, proveniente del DateTimePicker, a Report Viewer.

Observa que he indicado el número de parámetros que se pasarán, en este caso son dos y por eso he puesto 1(El conteo comienza desde cero). En la línea siguiente se manda llamar el nombre textual de cada parámetro que se definió anteriormente en el diseño del reporte y se asocia con el campo del cual tomará su valor.

Es importante mencionar que en el formulario donde se cargará la información deberás agregar la siguiente referencia, de lo contrario marcará un error en Parameters:

Imports Microsoft.Reporting.WinForms

Una vez hecho lo anterior solo queda ejecutar el desarrollo y deberás obtener algo muy parecido a lo que se muestra en la siguiente imagen donde el rango de fechas capturado en los DateTimePicker se visualizan también en el reporte:


Ahora solo queda que adaptes el código a tu desarrollo y listo.


¡Hasta la próxima!

Ing. Guadalupe López

"Ningún conocimiento es válido sino se comparte"

12 comentarios:

  1. hola me podrias ayudar a crear un procedimiento en donde tenga que juntar informacion de diferentes tablas para generar un acuse

    ResponderBorrar
  2. hola tienes idea de porque al agregar parámetros en mi reporte este pierde el relacionamiento de datos con el data set al momento de cargar el informe. Es mas en la opción Choose data source al momento da agregar un parámetro queda en blanco.

    ResponderBorrar
  3. Lo mas raro de todo es que yo venia usando los reportes hace un buen tiempo y nunca tube problemas pero ahora me pasa esto y no lo estoy pudiendo solucionar. Si llegas a tener alguna información o respondes por acá te agradecería que me lo indiques a mi correo que es diegobonini4161@gmail.com.
    Gracias

    ResponderBorrar
  4. tenia tiempo buscando esta información y cuando la encuentro es de web y estoy haciendo la tarea en c#

    ResponderBorrar
  5. Excelene Post, gracias por el aporte.

    ResponderBorrar
  6. Muy buen aporte Ingeniero, felicidades y continúe así...

    ResponderBorrar
  7. Hola,
    Requiero una asesoría personalizada, cómo nos podemos contactar.

    Gracias.

    Saludos,
    Javier

    ResponderBorrar
    Respuestas
    1. Hola Javier, gracias por visitar mi blog. Este es mi correo: datazarblog@gmail.com A tus órdenes. Saludos.

      Borrar
  8. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
    Respuestas
    1. Hola Tony, respondí a tu pregunta en el correo que me mandaste. Lo que tú ocupas es diferente al uso de parámetros que explico en esta entrada. Saludos.

      Borrar