Como crear reporte con reportviewer en C# .NET en visual estudio 2017

En este articulo voy a explicar cómo crear reporte con reportviewer en  C#.NET, de proceso de carga rápido.  Escribo este artículo debido a la experiencia en el trabajo, solía crear reportes con CristalReport la cual es una magnifica herramienta , pero tiene sus pros y contras, uno de los problemas  que frecuentemente tenia  es la migración de proyecto a las versiones superiores, la cual era un dolor de cabeza.  Por tal razón empezamos a usar reportviewer  que ya viene incluido dentro de la biblioteca BCL de .NET .

Para usar el reportviewer  en nuestras aplicaciones, vamos a  utilizar colecciones para agilizar el proceso de cargar  y también la clase Datable que proporciona un modelo de programación coherente independientemente del origen de datos que contiene, y  también se puede usar el  llenado del dataset  con tablas, en fin, también existen otras formas de cargar el contenido a un reportviewer.

Para este  ejemplo, se usa el gestor e base de datos SQLServer,  que a continuación se muestra las siguientes tablas para generar el informe.

USE Reporte;
DROP TABLE Persona;
Create table Persona(
Idpersona INT IDENTITY(1,1),
Nombre VARCHAR(15),
ApellidoPat VARCHAR(15),
ApellidoMat VARCHAR(15),
TipoDoc INT,
Correo VARCHAR(30),
 PRIMARY KEY(TipoDoc)
)
 DROP TABLE Documento;
CREATE TABLE Documento(
 IdDoc INT IDENTITY(1,1),
 Nombre VARCHAR(20),
Vigencia BIT,
  PRIMARY KEY(IdDoc)
)

ALTER TABLE Persona 
ADD FOREIGN KEY(TipoDoc) 
REFERENCES Documento(IdDoc)

INSERT INTO Documento(Nombre,Vigencia) VALUES('DNI',1);
INSERT INTO Documento(Nombre,Vigencia) VALUES('Certificado',1);
INSERT INTO Documento(Nombre,Vigencia) VALUES('C.I',0);

INSERT INTO Persona(Nombre,ApellidoPat,ApellidoMat,TipoDoc,Correo) 
VALUES('Limber','Guitierrez','Manzaneda',1,'lim@gmail.com');
INSERT INTO Persona(Nombre,ApellidoPat,ApellidoMat,TipoDoc,Correo) 
VALUES('Marcelo','Flores','Gutierez',2,'Mar@gmail.com');

Ya que hemos creado nuestras tablas  de cardinalidad de 1 a 1, a continuación vamos crear procedimiento almacenado  para hacer consulta  a la base de datos.

CREATE PROCEDURE DatosPersona 
AS
declare @valor as int=0
set @valor=(select COUNT(Per.Idpersona) FROM Persona AS Per)
IF @valor>0
    SELECT 
	Per.Nombre,Per.ApellidoPat,Per.ApellidoMat,Doc.Nombre,Per.Correo,Doc.Vigencia 
	FROM Persona as Per
	inner join Documento as Doc on Per.TipoDoc=Doc.IdDoc
	ELSE
RETURN @valor 
;Se ejecuta el procedimiento
exec DatosPersona

En el siguiente ejemplo vamos crear nuestro proyecto en visual estudio Comunity.

Despues de crear el proyecto debemos agregar el control ReportViewer, en la versión de Visual Estudio Comunity no viene incluido cuyo control, lo debemos instalar desde el repositorio, para hacer tal operación dirigirse al menú Herramientas -> Administrador de paquetes Nuget -> Consola de administrador de paquetes, en la consola pegar el siguiente fragmento de texto:

Install-Package Microsoft.ReportingServices.ReportViewerControl.WinForms –Pre

Una vez que se ha instalado ReportViewer Agregamos el control al cuadro de herramientas, clic en el derecho sobre el cuadro de herramientas -> Eligir elementos -> Examinar, debemos localizar el archivo dll que se encuentra en:

{Ruta del proyecto}\packages\Microsoft.ReportingServices.ReportViewerControl.Winforms.140.1000.523\lib\net40\Microsoft.ReportViewer.WinForms.dll

Una vez agregado el control, debemos de arrastrar al formulario principal, tal como se ve en la imagen.

Después de tener el control, necesitamos agregar la extensión RDLC para los reportes nativos de Visual Estudio, es decir nos permitirá diseñar los reportes, para realización esta acción ir a Menú herramientas -> Extensiones y actualizaciones -> Seleccionar en Linea -> en cuadro buscar escribir -> rdlc, luego haga clic en el botón descargar.

Una vez que se descargue, se debe cerrar todas las ventanas de visual estudio, y aparecera cuadros de dialogo, que son asistente de instalación, solo se debe seguir los pasos para que pueda efectuar los cambios.

Después de realizar la instalación del Plugin, ir al cuadro del proyecto generado, hacer clic derecho -> Agregar -> Nuevo elemento -> seleccionar el ítem de Informe, y agregar al proyecto el archivo de rdlc.

Después de agregar el archivo rdlc en el proyecto, nuevamente creamos un archivo para crear nuestra clase persona para agregar al origen de datos en el diseñador de reportes. El contenido de archivo  se muestra el código en el siguiente ejemplo.

Archivo Persona.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PoryectoReporte{
   public class Persona
    {
        //Propiedades
        public string Nombre { get; set;}
        public string ApellidoPat { get; set; }
        public string ApellidMat { get; set; }
        public string TipoDocument { get; set; }
        public string Correo { get; set; }
        public bool Vigencia { get; set; }
        //Asignar el constructor por
        //defecto para que no genere error
        //de argumentos
        public Persona() {
        }
        //Constructor que recibe parámetro de la misma clase
        public Persona(Persona Add) {
            Nombre = Add.Nombre;
            ApellidoPat = Add.ApellidoPat;
            ApellidMat = Add.ApellidMat;
            TipoDocument = Add.TipoDocument;
            Correo = Add.Correo;
            Vigencia = Add.Vigencia;
        }
    }
}

Para mostrar y diseñar datos en el informe hacer lo siguiente, abrir el archivo Reporte.rdlc, seleccionar en el panel derecho -> Datos de informe -> conjunto de datos -> clic derecho -> Agregar conjunto de datos -> Elegir el origen de datos como Objeto y luego seleccionar la clase persona:

Al presionar el botón finalizar, renombrar en el caja de texto que esta por defecto con el nombre DataSet1 a Personas.

A continuación en el siguiente ejemplo de imagen se muestra el diseño del informe, en el cual se agrega cuadros de texto y una tabla.

Para el campo tipo de documento se agrega la siguiente expresión tal como se ve en la imagen, lo que hace es formatear el tipo de dato booleano true o false en palabras legibles para el usuario común.

He aquí el código para cargar datos en el ReportViewer en el formulario principal, en el método CargarReporte cumple el cometido para cargar datos en el informe.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using Microsoft.Reporting.WinForms;

namespace PoryectoReporte
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Load += Form1_Load1;
        }
        /// <summary>
        /// Se carga los datos en el reporte 
        /// en el evento Load
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load1(object sender, EventArgs e)
        {
            CargarReporte();
           
        }
        /// <summary>
        /// Método para recuperar Datos a una lista
        /// y para mostrar en el ReportViewer
        /// </summary>
        private void CargarReporte() {
            List<Persona> Agregar = new List<Persona>();
            Conexionsql AcederDatos = new Conexionsql();
            foreach (DataRow Lista in AcederDatos.Datos().Rows){
                Agregar.Add( new Persona{
                    Nombre = Lista[0].ToString(),
                    ApellidoPat = Lista[1].ToString(),
                    ApellidMat = Lista[2].ToString(),
                    TipoDocument = Lista[3].ToString(),
                    Correo = Lista[4].ToString(),
                    Vigencia = Convert.ToBoolean(Lista[5])
            });
            }
            ///Mostrar datos en el reporte
            this.reportViewer1.LocalReport.ReportEmbeddedResource = "PoryectoReporte.Reporte.rdlc";
            ReportDataSource rds1 = new ReportDataSource("Personas", Agregar);
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(rds1);
            this.reportViewer1.RefreshReport();
        }

      
    }
    /// <summary>
    /// Clase para conectarse
    /// al servidor de base de datos
    /// </summary>
    public class Conexionsql {
       /// <summary>
       /// Retorna Tabla con datos
       /// </summary>
       /// <returns></returns>
        public DataTable Datos() {
            // Fragmento de código para
            //Para conexión al SQLSERVER
            DataTable Retornar=new DataTable();
            SqlConnection Conectar = new SqlConnection(@"Data Source={Nombreservidor};Initial Catalog=Reporte;Integrated Security=True");
            Conectar.Open();
            //Se ejecuta el procedimiento almacenado
            SqlDataAdapter Comandosql = new SqlDataAdapter("exec DatosPersona", Conectar);
            Comandosql.Fill(Retornar);
            Conectar.Close();
            return Retornar;
        }
    }
}

Al ejecutar el proyecto debería de mostrarse como en el siguiente ejemplo de imagen.

El ejemplo de cómo crear reporte con reportviewer  C# .NET, he aquí disponible para la descarga.

Ejemplo practico 33MB
Sobre el autor
Rodrigo Chambi Q.

Desarrollador de aplicaciones web y de escritorio, amante de la tecnología y autodidacta, me gusta conocer otras tecnologías, escribir artículos para compartir en la web y para estar al tanto en los nuevos paradigmas, respeto las políticas de software privativo y libre, ya que estas políticas son las normas que permite el desarrollo tecnológico social de la humanidad. filvovmax@gmail.com -- info@gitmedio.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios

  1. De Henry

    Responder

  2. De Emilio Santana

    Responder

  3. De Javier

    Responder

    • De Javier

      Responder

      • De Moises

        Responder

  4. De Jose

    Responder

  5. De Heraldo

    Responder

  6. De Juan

    Responder

  7. De david

    Responder

  8. De Ana Castillo

    Responder

    • De Ing.Joselito

      Responder

    • De Guillermo

      Responder