post icon

Como crear reportes con Crystal Reports en ASP.Net y SQL Server

Hace pocos hemos visto como crear reportes con Reporting Services y como hacerlo con Crystal Reports en WinForms, pero hoy veremos como crear un simple reporte con Crystal Reports y mostrarlo con ASP.Net escribiendo un par de líneas de código.

El artículo lo iré dividiendo, ésta vez será un reporte plano, en las siguientes entregas cómo pasarle parámetros dinámicamente, exportar directamente a .PDF y otros subtemas que podrían resultar de interes.

Para seguir con éste tutorial necesitaremos de la BD Adventure Works, en este enlace pueden ver como conseguirlo e instalarlo para los que no conocen.

El primer paso será crear un nuevo proyecto llamado Crystalito (que ingenioso estoy a veces xD)

Ahora creamos una nueva carpeta dentro del proyecto, llamada Reportes. Dentro de ella agregaremos un nuevo elemento, un reporte para listar los proveedores de nuestra base de datos.

Si es la primera vez que usamos la herramienta, deberemos aceptar la licencia de uso. Sino nos aparecerá la pantalla de galerías del reporteador y crearemos unos basado en el asistente. Luego veremos reportes más complejos para diseñarlos manualmente.

Nos aparecerá una pantalla de donde podremos elegir la fuente de datos que alimentará a nuestro reporte. Nosotros vamos a crear uno nuevo de ADO.Net, pero ello no quiere decir que tienen que ser el mismo servidor que el de producción, puede ser uno de desarrollo o nuestra propia maquina nada más. Es suficiente que las estructuras de las BD’s sean iguales a las que usaremos en Producción con tal la conexión y credenciales de login las cargaremos por código, siendo en la mayoría de los casos el mismo que la credencial que nos autenticó a la BD para trabajar con los WebForms (recalco, no estrictamente necesario esto último). De hecho para diseñar nuestro reporte vamos a utilizar OLE DB de ADO pero no quiere decir tampoco que en producción se conectará por OLE DB, es para simple y mero diseño.

Elegimos el proveedor de datos para la conexión, en este caso el Native Client

Seteamos los parametros de la credencial

Y si deseamos personalizar más la conexión nos queda una última pantalla para hacerlo

Ya nos aparecerá el servidor, con todas sus tablas, vistas y procedimientos almacenados que podemos usar, dentro del Schema Purchasing veremos la tabla Vendor, seleccionamos la tabla así

Seleccionamos las columnas a mostrar

En las siguientes pantallas podrán agrupar y filtrar los datos, de momento los dejaremos pasar a éstas opciones para el tutorial.

Ahora elegimos el estilo que nos gusta para el reporte, por cierto son muy simples y algo feos. Sientanse libres de retocar la apariencia de sus reportes como gusten.

Dejando el diseño algo asi

El código ASP lo haremos sencillo y limpio para que no se preste a confusiones, quedando asi:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"
    Namespace="CrystalDecisions.Web" TagPrefix="CR" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Página sin título</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lblMensaje" runat="server" Text=""></asp:Label>
        <CR:CrystalReportViewer ID="VisorCR" runat="server" AutoDataBind="true" />
    </div>
    </form>
</body>
</html>

Y finalmente el código que irá dentro del Load de nuestra pagina será como sigue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System;
using System.Data;
using System.Data.SqlClient;
using CrystalDecisions.CrystalReports.Engine;
 
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var conn = new SqlConnection("Data Source=NABUCODONOSOR;Initial Catalog=AdventureWorks;User Id=usuario;Password=********");
        try
        {
            using (var comando = new SqlCommand("SELECT * FROM Purchasing.Vendor", conn))
            {
                using (var adaptador = new SqlDataAdapter(comando))
                {
                    var ds = new DataSet();
                    adaptador.Fill(ds);
 
                    var reporte = new ReportDocument();
                    reporte.Load(Server.MapPath("Reportes/Proveedores.rpt"));
                    reporte.SetDataSource(ds.Tables[0]);
                    reporte.DataSourceConnections[0].SetConnection("NABUCODONOSOR", "AdventureWorks", "usuario", "********");
 
                    VisorCR.ReportSource = reporte;
                } // end using adaptador
            } // end using comando
        } // end try
        catch (Exception ex)
        {
            lblMensaje.Text = ex.Message;
        }
        finally
        {
            if (conn.State != ConnectionState.Closed)
                conn.Close();
            conn.Dispose();
        }
    }
}

El usuario verá un reporte como este

Comentarios desde Facebook:

  1. Nexus PERU Google Chrome Windows
    30 enero 2014 at 13:42 #

    Tu Post me ayudó un montón!

  2. Vanessa Google Chrome Windows
    14 noviembre 2013 at 16:38 #

    Me he leido todos los tutoriales habidos y por haber, que este lo vi de pasadita porque presiento que tampoco funcionará
    =( que triste, estudié Redes Computacionales, pero consegui esta pega por pituto y me están mandando a programas
    y a hacer reportes, llevo casi 2 o 3 semanas sin lograrlo, y la verdad es que ya me harté.
    RENUNCIO! js ASI ES LA VIDA NO MAS! TRISTE Y FOME!
    ADIOS!

  3. Chris NICARAGUA Google Chrome Windows
    17 mayo 2012 at 13:00 #

    Yo que tu cambiaba la version del crystal report. Cual estas ocupando? tenias anteriormente otras versiones de crystal report en tu visual studio? si es asi solo deja una, la mas reciente y luego en tu formulario o web.config indica esa version.

  4. jose Google Chrome Windows
    17 mayo 2012 at 02:41 #

    Una ayuda urgente ustedes que todo lo saben, tengo mi codigo:
    ReportDocument rpt = new ReportDocument();

    DataSet ds = new DataSet();
    Gestion_Reportes gr = new Gestion_Reportes();
    ds = gr.Select_listadiaria(TextBox1.Text);
    rpt.Load(Server.MapPath(“~\Reportes\ReportDiario.rpt”));
    rpt.SetDataSource(ds.Tables[0]);
    rpt.DataSourceConnections[0].SetConnection(Datos.server, Datos.bd, Datos.user1, Datos.pass);

    this.CrystalReportViewer1.ReportSource = rpt;

    Select_listadiaria me envia un dataset, y normal lo muestra pero mi barra de herramientas del visor del crystal report no funciona y tampoco exporta … dice origen de datos no valido… ayudenme

    • Ron Safari Linux
      17 mayo 2012 at 10:34 #

      Cambia las barras invertidas por barras normales

      • jose Google Chrome Windows
        17 mayo 2012 at 10:57 #

        Ron gracias por responder pero es la barra que por defecto sale en el crystal report viewer no sabia q se puede cambiar, pero si se puede sabes cual es la propiedad en viewer

  5. Nicolás ARGENTINA Google Chrome Windows
    5 abril 2012 at 00:43 #

    Excelente post. Le agregué al reporte un parámetro:

    Dim V_INFORME As New CrystalDecisions.CrystalReports.Engine.ReportDocument()
    Dim V_PARAMETRO1 As CrystalDecisions.Shared.ParameterField
    V_PARAMETRO1 = V_INFORME.ParameterFields(0)
    V_PARAMETRO1.CurrentValues.Clear()
    V_PARAMETRO1.CurrentValues.AddValue(“etc.”)

    Anda fenómeno, pero cuando aprieto el botón de imprimir o el de exportar el informe a otro formato me vuelve a pedir el parámetro y los datos de la conexión (en la conexión me pide la contraseña, los otros campos aparecen escritos, servidor, nombre usuario y base). Porqué ocurre esto? Alguien me puede decir como solucionarlo? Desde ya, muchas gracias.

  6. Juan Alberto GUATEMALA Google Chrome Windows
    13 febrero 2012 at 00:16 #

    Muchas gracias voy a probarlo. Me espera una larga noche jeje

    Saludos!

  7. Christian NICARAGUA Google Chrome Windows
    20 diciembre 2011 at 21:58 #

    xD ya lo solucione, era la version que se utilizaba de crystal report

    en el config.web tengo una version distinta:

    Asi que solo hice el cambio de version que tengo en el web.config a la pagina que contiene el reporte. es decir de la 10.x.x.x a la 13.x.x.x.x

  8. Christian NICARAGUA Google Chrome Windows
    20 diciembre 2011 at 21:49 #

    Yo tengo un problemita, me dice cada vez que deseo cargar el reporte lo siguiente:

    Invalid Report Source.

    :(

    el codigo que tengo es un poco distinto pero es la misma idea, regresar un dataadapter desde mi funcion y luego rellenar el dataset

    Basicamente es esto:
    dsKardex ds = new dsKardex();
    DataTable dt = new DataTable();
    ReportDocument cReport = new ReportDocument();
    SqlDataAdapter adaptador = objSQL.getDataAdapterReporte(“0007″, “1010”, “2011-01-11″, “2011-30-12″, “Entrada”);
    adaptador.Fill(ds);

    try
    {
    cReport.Load(Server.MapPath(“Reportes/CrystalReportKardex.rpt”));
    cReport.SetDataSource(ds.Tables[0]);
    //cReport.DataSourceConnections[0].SetConnection(“192.168.0.103″, “KARDEX”, “sa”, “Pmnica2011″);
    CrystalReportViewer1.ReportSource = cReport;
    }
    catch (Exception exc)
    {
    Ext.Net.X.Msg.Show(new Ext.Net.MessageBoxConfig
    {
    Title = “Error”,
    Message = exc.Message,
    Buttons = Ext.Net.MessageBox.Button.OK,
    Icon = Ext.Net.MessageBox.Icon.INFO
    });
    }

    Si me pudieran ayudar :D

  9. Deivid MEXICO Google Chrome Windows
    11 noviembre 2011 at 14:09 #

    Gracias GeekZero Ya le agregue el conotrol del CristalViewer, pero me sale el error que mencioné u_u…

    No se puede obtener acceso a un miembro no estático de tipo externo ‘_Default’ mediante el tipo anidado ‘ASP.default_aspx._Default’

    • GeekZero PARAGUAY Google Chrome Windows
      11 noviembre 2011 at 14:27 #

      lo mas probable que tocaste la clase partial de tu webform, si estas probando solo este ejemplo prueba eliminado la pagina y creala de nueva, será mas rapido, que intentar buscar una solucion a eso sin ver tu trabajo..

  10. Deivid MEXICO Google Chrome Windows
    11 noviembre 2011 at 14:06 #

    Mmmmm… yo de nuevo, la regué en el ID del CrystalViewer, total se lo cambie, diculpen tantas molestias, ahora el error que me sale es el siguiente :s…

    CS0038: No se puede obtener acceso a un miembro no estático de tipo externo ‘_Default’ mediante el tipo anidado ‘ASP.default_aspx._Default’

    public partial class _Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    var conn = new SqlConnection(“Data Source=myhost;Initial Catalog=mydb;User Id=myuser;Password=mypass”);
    try
    {
    using (var comando = new SqlCommand(“SELECT b_traba1.rpe, b_contra.cl_puest, c_puesto.puesto FROM c_puesto, b_traba1, b_contra WHERE b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest GROUP BY b_traba1.rpe, b_contra.cl_puest, c_puesto.puesto ORDER BY b_traba1.rpe”, conn))
    {
    using (var adaptador = new SqlDataAdapter(comando))
    {
    var ds = new DataSet();
    adaptador.Fill(ds);

    var reporte = new ReportDocument();
    reporte.Load(Server.MapPath(“Proveedores.rpt”));
    reporte.SetDataSource(ds.Tables[0]);
    reporte.DataSourceConnections[0].SetConnection(“myhost”, “mydb”, “myuser”, “mypass”);

    CrystalReportViewer2.ReportSource = reporte;
    } // end using adaptador
    } // end using comando
    } // end try
    catch (Exception ex)
    {
    Lbl1.Text = ex.Message;
    }
    finally
    {
    if (conn.State != ConnectionState.Closed)
    conn.Close();
    conn.Dispose();
    }
    }
    }

    No se por que no sale el código completo en el POST…

  11. Deivid MEXICO Google Chrome Windows
    11 noviembre 2011 at 13:55 #

    No especifique el error en el post pasado, lo siento es este :p…

    Mensaje de error del compilador: CS0103: El nombre ‘CrystalReportViewer1′ no existe en el contexto actual

    • GeekZero PARAGUAY Google Chrome Windows
      11 noviembre 2011 at 13:59 #

      Falta que agregues al webform el control crystalreportviewer (el que se encuentra en la barra de herramientas) y se coloques ese nombre nada mas

  12. Deivid MEXICO Google Chrome Windows
    11 noviembre 2011 at 13:52 #

    Oralé!!! Muchas gracias por tu aporte, quisiera y me pudiesen ayudar con este error:

    CrystalReportViewer1.ReportSource = reporte;

    Este es el código que tengo:

    public partial class _Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    var conn = new SqlConnection(“Data Source=myhost;Initial Catalog=mydb;User Id=myuser;Password=mypass”);
    try
    {
    using (var comando = new SqlCommand(“SELECT b_traba1.rpe, b_contra.cl_puest, c_puesto.puesto FROM c_puesto, b_traba1, b_contra WHERE b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest GROUP BY b_traba1.rpe, b_contra.cl_puest, c_puesto.puesto ORDER BY b_traba1.rpe”, conn))
    {
    using (var adaptador = new SqlDataAdapter(comando))
    {
    var ds = new DataSet();
    adaptador.Fill(ds);

    var reporte = new ReportDocument();
    reporte.Load(Server.MapPath(“Proveedores.rpt”));
    reporte.SetDataSource(ds.Tables[0]);
    reporte.DataSourceConnections[0].SetConnection(“myhost”, “mydb”, “myuser”, “mypass”);

    CrystalReportViewer1.ReportSource = reporte;
    } // end using adaptador
    } // end using comando
    } // end try
    catch (Exception ex)
    {
    Lbl1.Text = ex.Message;
    }
    finally
    {
    if (conn.State != ConnectionState.Closed)
    conn.Close();
    conn.Dispose();
    }
    }
    }

  13. Armando MEXICO Mozilla Firefox Windows
    1 noviembre 2011 at 14:21 #

    Grax, de muuucha utilidad!! lo implementé sin falla :D

  14. Tomas Rojas VENEZUELA Internet Explorer Windows
    25 mayo 2011 at 13:37 #

    Hola muchas gracias esta super util este tutorial pero me podrias mostrar el codigo de la clase VisorCR o que tipo de objeto es? Saludos

  15. Areli Gonzalez MEXICO Mozilla Firefox Windows
    5 mayo 2011 at 11:42 #

    SALUDOS.. ESTABA REALIZANDO ESTE TUTO, ANTES DE LA PARTE DE “Ya nos aparecerá el servidor, con todas sus tablas, vistas y procedimientos almacenados que podemos usar, dentro del Schema Purchasing veremos la tabla Vendor, seleccionamos la tabla así”…. AL MOMENTO DE DAR CLIC EN SIGUIENTE ME SALIO ESTE ERROR:

    La conexion no es posible Detalles: Codigo de error ADO:0x Origen Microsoft SQL Server Native Client 10.0 Descripcion: Named Pipes Provider: Could not open a connection to SQL Server [53]. Estado de SQL 08001 Error nativo:

    ME PUEDES AYUDAR A SOLUCIONARLO???

    GRACIAS!!!

    • GeekZero PARAGUAY Google Chrome Windows
      5 mayo 2011 at 13:57 #

      Fijate principalmente en 3 cosas:

      1. Este corriendo la instancia de SQL Server (fijate en el nombre de instancia incluso)
      2. Este permitido la conexión remota
      3. Si estan habilitados los protocolos TCP/IP y Named Pipes
      4. Este activo el SQL Browser
  16. Agustin Gutierrez ARGENTINA Mozilla Firefox Windows
    26 enero 2011 at 06:54 #

    Hola te hago una consulta cuando armo la pagina asp me tira los siguientes errores:
    Error 1 No se puede cargar el archivo o ensamblado ‘CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304′ ni una de sus dependencias. El sistema no puede hallar el archivo especificado. C:\Proyectos\academiaPuntoNet\Academia\Web\Default.aspx 2
    Error 2 Etiqueta de servidor ‘CR:CrystalReportViewer’ desconocida. C:\Proyectos\academiaPuntoNet\Academia\Web\Default.aspx 12
    Error 3 El elemento ‘CrystalReportViewer’ es desconocido. Este desconocimiento puede deberse a un error de compilación en el sitio Web. C:\Proyectos\academiaPuntoNet\Academia\Web\Default.aspx 13 5 C:\…\Web\
    Mi codigo asp es:

    Página sin título

  17. juan EL SALVADOR Google Chrome Windows
    7 diciembre 2010 at 18:55 #

    EXCELENTE EXPLICACIÓN GRACIAS PORQUE EN LA WEB HAY GENTE COMO VOS ME SIRVIO DE MUCHO, QUISAS PODRÍAS PONER COMO EXPORTARLOS A PDF, EXCEL O WORD

  18. Giovanni BOLIVIA Google Chrome Windows
    23 noviembre 2010 at 13:41 #

    gracias por el aporte me sirvió de mucho

Trackbacks/Pingbacks

  1. Tweets that mention Como crear reportes con Crystal Reports en ASP.Net y SQL Server | DevTroce.com -- Topsy.com UNITED STATES - 3 noviembre 2010

    […] This post was mentioned on Twitter by Ronald Riveros, DevTroce. DevTroce said: Como crear #reportes con Crystal Reports en ASP.Net y SQL Server: Hace pocos hemos visto como… http://goo.gl/fb/0aKvD […]

  2. Exportar directamente a PDF los reportes de Crystal Reports en ASP.Net | DevTroce.com WordPress - 3 noviembre 2010

    […] veíamos como crear reportes de manera sencilla con Crystal Reports en ASP.Net, el mismo era visualizado directamente en el report viewer, pero para algunos es mucho más […]

Responder