Creación de Reportes con Crystal Report con Visual Studio 2010 en Windows Form.

15 abril, 2011 at 2:48 (C#, Crystal Report, Visual Studio, WindowsForm)

En esta ocasión crearemos un reporte en Windows Form con Crystal Report en Visual Studio 2010 y Net Framework 4. Como vimos en la entrada de instalación de Crystal Report para VS 2010, tenemos que instalar CR for VS 2010, aunque también podemos usar Visual Studio 2005 y 2008 sin instalar nada ya que por defecto CR está en estas ediciones. Código Fuente aquí

Para este ejemplo usaremos la base de datos Northwind en las tablas Productos y Categorías.

El reporte mostrara los productos agrupados por categoría además de un gráfico en forma de torta o circulo para mostrar cuantos productos existen por categoría.

image

Materiales

1.       Base de Datos Northwind

2.       Visual Studio 2010

3.       Crystal Report para Visual Studio 2010

4.       Sql Server 2008 Express o superior

Para realizar un reporte con Crystal Report tenemos muchas formas, usando clases, directamente con la base de datos usando tablas o vistas y usando DataSet tipados. Esta será la forma que usaremos para generar el reporte.

Materiales

1.       Base de Datos Northwind

2.       Visual Studio 2010

3.       Crystal Report para Visual Studio 2010

4.       Sql Server 2008 Express o superior

Para realizar un reporte con Crystal Report tenemos muchas formas, usando clases, directamente con la base de datos usando tablas o vistas y usando DataSet tipados. Esta será la forma que usaremos para generar el reporte.

Creamos un nuevo Proyecto de Windows form con Net 4.0

Por defecto VS 2010 ejecuta el proyecto con Net Framework 4 Client Profile, esto se debe a que el Framework es muy grande y muchas veces no usamos todo el potencial asi que podemos recurrir al Net Framework 4 Client Profile ya que este es una versión reducida del .Net Framework 4 y por ende más fácil de trasportar y de instalar ya que no usa todas la librerías y nuestra aplicación puede ser más liviana para la instalación.

Pero si queremos usar Crystal Report no podemos usar la versión Reducida de .Net Framework 4 asi que nos vamos al MenúàProyectoàPropiedades del Proyecto. Y cambiamos de Motor de Ejecución a .Net Framework 4, Para poder usar CR for VS 2010

image

Creando el Data Set

Crearemos el data set a partir de la base de datos. Para poder realizar esto primero vamos a Explorador de Servidores en cual es muy útil para manejar un servidor de base de datos en este caso SQL SERVER 2008.

Para poder visualizar el explorador de servidores en el Menú VeràExplorador de Servidores o (Ctrl+Alt+S).

Luego presionamos conectar con base de datos y conectamos con la base de datos Northwind

image

Una vez conectada la base de datos podemos ver las tablas que esta BD contiene.

image

Ahora agregamos un Data Set a nuestro proyecto.

image

Colocamos el nombre de dsProductoPorCategoria.xsd. Arrastramos la tabla para que el reporte pueda usarlo como fuente de datos.

image

La relación se construirá automáticamente con esta estructura definida el reporte podrá tomar los datos y ordenarlos de forma que podamos agrupar los productos por categorías.

Creamos el Reporte

Para crear el reportes usaremos el asistente el cual nos permitirá elegir entre varias opciones la más adecuada para nuestro reporte.

Agregamos el reporte de Crystal Report

image

 

Cuando agregamos el reporte usaremos el asistente de informe para ayudarnos en la configuración del reporte.

image

Elegimos la conexión del reporte del cual tomara la estructura para definir el informe, para este paso solo tenemos que elegir el data set tipado que construimos anteriormente

image

Vemos la tablas relacionadas y damos siguiente

image

Seleccionamos los campos a mostrar esto es importante ya que si elegimos muchos campos nuestro informe se verá mu llenos y eso puede provocar que el informe no sea tan legible, así que solo tenemos que usar los campos que realmente necesitemos.

image

Ahora podemos agrupar los datos del informe esto es opcional pero como deseamos tener un informe que muestre los productos por categoría debemos agrupar los datos por la categoría.

image

Luego también podemos insertar a nuestro informe campos de resúmenes (opcional). En estos campos de resumen, indicaremos que calcule el promedio de precios de una categoría y la sumatoria del stock de los productos de esa categoría.

image

En esta sección podemos ordenar por los grupos superiores o inferiores pero por defecto elegimos ninguno.

image

Agregamos el grafico al reporte (grafico circular o de torta)

image

Si deseamos realizar una sub agrupación podemos seleccionar en esta ventana pero para nuestro caso es innecesario.

image

Finalmente nuestro informe está concluido.

image

Si requerimos colocar el informe al último del informe podemos hacerlo con solo arrastra el grafico a la parte inferior de la sección pie de informe (Section 4).

Pero nuestro trabajo no termina ahí tenemos que agregar un visor del reporte al formulario Windows Form.

image

Poblar el Reporte

Ahora que tenemos definida la estructura y tenemos el visor de informe. Esto no significa que el reporte esté listo ya que el reporte por si solo aun no está lleno, si bien usamos el data set para definir la estructura del reporte este dataset no está lleno. Ahora toca llenar el data set con los datos de la base de datos.

Creamos el método PoblarReporte el cual llena el data set con las sentencias SQL que se requieran, como tenemos que llenar dos tablas usaremos dos distintos DataAdpters.

2011-04-15 01h35_08

Ahora llamamos este método en el evento Load del formulario.

image

Finalmente ejecutamos el reporte y vemos como nuestro reporte se generado con éxito.

image

Nota Importante para la ejecución en VS 2010.

Cuando creamos de esta manera el reporte en VS 2010 tendría que agregar automáticamente las librerías necesarias, además configurar el App.Config de manera que la ejecución resulte exitosa. Pero por alguna razón en algunos  VS 2010 no configura de manera correcta el App.config y nuestro reporte no se ejecuta, en otros no existe el problema. Estuve probando en diferentes VS 2010 sobre todo ultimate pero me sale un error, en otros no y todo es normal, tal vez sea porque algunos PC eran de X64 y otros de X32 pero, no hay problema si tenemos este error de ejecución el cual indica que no podemos compilar porque no se reconoce las librerías de CR.

image

Para que se ejecute de manera correcta solo tenemos que configurar el App.Config, agregando esta línea.

<startup useLegacyV2RuntimeActivationPolicy="true">

<supportedRuntime version="v4.0"/>

</startup>

 

 Y comentando  la línea

<!–<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>–>

 

Quedando el App.config como sigue:

image

Con esto ya se ejecuta nuestro reporte.

Código Fuente

El código fuente del proyecto con PDF del Articulo mas la base de datos aquí

 

31 comentarios

  1. Miguel Espinoza dijo:

    Hola, estoy trabajando con Cristal Report y lo que quisiera saber es que si existe alguna manera de colocar una variable como título de las columnas del reporte que te genera CR, de tal manera que si la variable contiene la palabra ENERO, entonces en el reporte como nombre de columna te salga Enero.

  2. edwin quispe dijo:

    olas man estube leyendo loo k has dejado… miraq tengo un problema con mi reporte
    uso el vb 2010 y el crystal reports 2010 mi reporte me sale normal
    xro cuando le doy xra k ejecute el reporte varias veces osea (la primera ves sale la segunda y la trcera etc) xro maso en la 5 vez k ejecuto el mismo reporte me sale error de coneccion k ia no me deja conectar me sale la vntana donde tengo k ponerle el nombrel del servidor, bd, usuario etc le doy xro nada
    cierro esa venta sin cerrar mi ventana principal(sea era una venta tipo mdi) y abro otro reporte o el msimo y el error continua … tengo k cerrar too el aplikativo xra k corra denuevo bien :S xfa me puedes dar alguna ayuda plz!! stare muy agredecido

    • Giovanni Vladimir dijo:

      Talvez no estas cerrando la conexion apropiadamente. o en algun lado estas sobre escribiendo la cadena de conexion. Revisa si todas las conexiones se cierran correctamente. y si la cadena de conexion no se sobreescribe

  3. Alex dijo:

    mi problema es que no puedo publicar mi reporte de crystal report usando vs2010 claro esta con asp.net, uso las herramientas de crystalreportsource (al cual le agrego un reporte ya realizado con la version cr2008 sp3), crystalreportviewer (le enlazo al crystalreportsource), esto al ejecutarlo con F5 dentro de vs2010 no tengo problemas, pero al publicarlo, lo unico que me sale es la barra de herramientas del crystal y el contenido de los datos nada que ver, y ahi me quedo y no doy ni par adelante ni para atras… solicito y tu ayuda por favor….. como hago para que se vea el reporte de crystal al publicarlo… que es lo que me falta. (ojo que ya tengo el crystal for vs2010 y el runtime 64bit).
    saludos desde Ecuador.
    se me olvidaba, la publicacion es en intranet… ahora yo no tengo ninguna linea de codigo escrita,yo no estoy cargando nada en el evento load d ela pagina… todo es seleccion desde los menus, propiedades… (cuando digo que dando F5 se ejecuta dentro del vs2010 se me muestra el reporte sin problemas). mi problema es cuando publico… no hay datos del reporte. si te ubicas en las propiedades del proyecto web, (empaquetar/publicar web) en la parte donde dice elementos que se van a implementar y elijes la opcion solo los archivos necesarios para ejecutar esta aplicacion te da un error que no se puede conectar a los datos… pero si elijes la opcion todos los archivos de este proyecto o la otra opcion no te da error al emnos en fire fox y solo se te presenta la barra deherramientas de crystal y los datos no

    , y si lo ejecutas en el explorer te sale un mensaje de error indicandote que tienes el error enla linea 71

  4. Victor Fdz dijo:

    Hola que tal, me podrias mandar el código a mi correo, esque no me deja descargarlo.
    Saludos!

    • Giovanni Vladimir dijo:

      claro enviame tu correo

    • Giovanni Vladimir dijo:

      claro enviame tu correo a gvcallisaya@hotmail.com

      • maicol dijo:

        Hola giovanni mi Nombre es maicol .. pues quisiera me ayudes con un reporte .. me explico acontinuacion:

        tengo 1000 usuarios las cuales se logean .. y al entrar al sistema este los reconoce…
        y automaticamente se le muestra una grilla con sus notas de todo un semestre
        es entonces que tiene la opcion de impresion claro solo se imprimira los cursos y los promedios finales ya no todo detallado como en la grilla
        en la grilla en evento load (curso,practica1, examen parcial, examen final, promedio)
        en el reporte evento click de un button , el reporte mostraria(como detalle(curso,promedio final)como cabecera el logo del Instituto, el codigo del alumno , su ciclo, especialidad, turno,apellidos y nombrees, y el respectivo titulo de cabecera ….)

        bueno gracias a tu ejemplo de itextsharp .. logre casi lo que queria el problema radico en el formato.. no le puedo dar un buen formato…
        osea con el logo,y los demas datos… ademas que me ubiera querido que el itextsharp se habra como una nueva pagina .. y no ocultando mi formulario pareciendose que estuviera ya fuera de la aplicacion….

        lo que quiero lograr es usar el crystal reports pero no me sale… me han dicho que utilize dataset tipiados .. en el crystal reports si puedo darle el formato que quiero.. mas facilmente.. pero quisiera se carge justamente de los datos de mi grilla.. pero no se donde poner la condicion.. osea la condicion de carga biene hacer mi codigo del alumno

        alumno se logea —-> sistema muestra notas
        alumno click en imprimir—> sistema abre la ventana de impresion del crystal pero de las notas del alumno logeado

        hasta ahora solo puedo hacer un crystal pero ya con una consulta definida… osea sin condiciones… necesito que me ayudes a cargar ese crystal de los datos de mi grilla .. o como seria .. quisiera me expliques … saludos amio
        atte.
        Michael Delgado Torres

        maicol8k@hotmail.com

        • Giovanni Vladimir dijo:

          Lo que tiene que hacer es. llenar el dataset que le pasas por parametro al crystal report con los datos de tu grilla y no directamente como en el ejemplo.
          Primero recoges los datos de la grilla hacia un datatable o directamente al dataset y luego lo pasas al reporte. no es muy dificil solo tiene que buscar las propiedade de la grilla y agarrar sus datos.

  5. Jano García Montero dijo:

    hola una consulta
    como puedo hacer un reporte con 2 procedures? osea q me liste por ejemplo empleados sin fecha de nacimeinto y otro q me liste empleados sin fecha de cese? si quiero que todo este en 1 solo reporte

    • Giovanni Vladimir dijo:

      Lo que puedes hacer es usa un if si lo necesitas con fecha le das el sp1 y si no le das el sp2 lo guardas en una variable cadena y le das como parametro al comand, en su propiedad ComandText.

  6. Omar Loaiza J. dijo:

    Graciasp por este post, logre solucionar el problema. Solo hay que seguir los pasos.

  7. Manuel dijo:

    Hola genet, mi problema es que tengo un reporte en VB2010.net y Crystaleport SAP, en mi equipo funciona bien el reporte pero cuando lo llevo a otra maquina me sale el formato del reporte sin los valores, coloque el mismo nombre del servidor y nada, he hecho varios cambios y no me funciona, quien me puede explicar que puede suceder alli

    • Giovanni Vladimir dijo:

      Tales no estas pasando los datos correctamente verifica que la conexión se estableció y que los datos están correctos

  8. carlos dijo:

    Giovanni muy bueno tu blog, a ver si me puedes ayudar, soy nuevo en esto de crystal report con vs 2010 y quisiera saber como puedo hacer : 1)filtros de busqueda con este nuevo formato yo creaba informes con cr 8.5 y en todos utilizaba filitros con ” formula = ” ya sea por fechas o por parametros pero aaca no se donde colocar dichos parametros
    2) mi aplicacion usa impresoras de una red, el componente que usa cr visual studio 2010 no me muestra la posibilidad de buscar y configurar dichas impresora y tambien quisiera que el informe me imprimiera directamente y sin preguntar en la impresora configurada. en cr 8.5 la configuracion de imprimir directamente se hacia en las propiedades del componente y la configuracion se hacia en el printer setup. te agradeceria mucho tu ayuda si es posible .. un saludo desde Chile … Carlos H.

    • Giovanni Vladimir dijo:

      Hola. Gracias por el apoyo. Para poder hacer filtros de búsqueda puedes hacer que la aplicación realice el filtro o Sea filtras los datos y le envía estos datos al reporte. Tal ves no sea la más elegante pero es efectiva recuerda que tú decide que datos le envía atraves del dataset o el datatable los datos al reporte. Para enviar directamente a la impresora puedes buscar en sus propiedades del crystal ya que es posible enviar directo sin necesidad del pre visualizar el reporte. Busca el método, sí puedo en está semana posteo un artículo tratando ese.asunto.que es muy importante. Saludos

  9. carlos dijo:

    Te agradezco tu tiempo y buena disposición voy a probar

  10. carlos dijo:

    si pudieras mandar un ejemplo seria muy didáctico ya que creo que a muchos colegas les podría servir

  11. carlos dijo:

    revise bien y en las propiedades no aparece “ningun destination = 1 printer” como en cr 8.5

  12. Manuel dijo:

    Gracias mi pana, muy bueno tu comentarios me han servido de ayuda

  13. Alfonso C dijo:

    Pregunta.- Como puedo evitar que aparezca la ventana en la que uno se autentica, en mi proyecto estoy usando Vb VS2010 con CR2010 y base de datos SQL Server 2008 (ODBC SQL Server native client 10.0)?

  14. giancastillo2010 dijo:

    Hola doc como estas ahora estoy haciendo un sistema en access con vb.net2010 y lo que pasa q no puede llenar el cr con un consulta simple lo que hago es crear un dataset y crear un datatable y luego ese dataset agregarlo a mi cr con sus campos pero cuando hago la llamada de mi reporte me sale vacio sin nada, a que se debe. te adjunto mi codigo:

    Dim dt As New DataTable
    Dim repo As New CRList_UnidadMedida
    Dim DSReport = New DSListarUnidadMedida
    dt = mostrar_reporte(“SELECT codunid, desunid, abrunid FROM munidad_medida”)
    ‘dt.TableName = “dtUnidadMedida”
    DSReport.Tables.Add(dt)
    repo.SetDataSource(DSReport)
    Me.CrystalReportViewer1.ReportSource = repo
    Me.CrystalReportViewer1.RefreshReport()

    • Giovanni Vladimir dijo:

      Talves lo q pasa es que el dataset no se está llenando correctamente. Cuando le pasas el datatable. Fíjate sí el datast está lleno

  15. Cristhiam Paul dijo:

    llevaba como 1 semana luchando con el maldito crystal report y el sql ce, pero gracias a ti lo logre!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!…… Eres el mejor… no tengo como agradecerte……..

  16. Guillermo Jimenez dijo:

    Hola el tutorial esta muy completo hice todos los procedimientos que en el dice pero aun asi no logre que cargara el reporte dice lo siguiente “No se encuentra el reporte en los recursos del manifesto. Genere el Proyecto y vuelva a intentarlo” e llenado el dataset correctamente pero no entiendo por que me sale ese error si pudieras ayudarme seria bueno Gracias.

  17. Nuncia dijo:

    Buenas Givanni, tengo problemas para elaborar reportes con crystal. segui los pasos de tu tutorial ,pero al momento de previsualizar el reporte no obtengo los datos de mi dataset.

    saludos y gracias.
    Nuncia

  18. Gustavo Soto dijo:

    Que tal Giovanni, tengo un problema que ojala puedas ayudarme,
    tengo una aplicacion en VS2010 en el cual utilizo crystal reports, ya supere todos los problemas para la instalacion.

    ahora el problema que tengo es que cuando creo el proyecto de instalacion, y lo corro en otra maquina que no es la mia, el crystal reports no funciona, en VS2008 solo hay que ejecutar en las maquinas cliente el setup de Crystal Reports que biene con esta version, pero en VS2010 no viene este setup, he buscado por todos lados y no he encontrado la solucion,
    ojala puedas ayudarme.
    saludos.

  19. Alma dijo:

    Graaaacias muchas gracias

  20. Alex dijo:

    buenas….
    y si quisiera direccionar el reporte directo a una impresora, sin necesidad de tener una vista previa???

  21. thony dijo:

    bien chvere el tutorial..
    ahora mismo lo estoy probando
    gracias…

  22. jose serrano dijo:

    hola estoy vatallado con el crystal report en el visual basic 2010, cheke tu tuto, y realice todo pero cuando intento poner el CrystalReportWiewer aparece desavilitado y no puedo usarlo puedes ayudarme con esto.

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.