En mis ratos libres ...

29 agosto 2012

Crystal Report en WPF





Hola amigos el día de hoy vamos a platicar un poquito acerca de Crystal Report y Windows Presentation Foundation, Crystal Reports, según Wikipedia “es una aplicación de inteligencia empresarial utilizada para diseñar y generar informes desde una amplia gama de fuentes de datos”.

Crystal Report se convirtió en el escritor de informes estándar cuando Microsoft lo libero con Visual Basic, es por eso que Visual Studio incorpora una versión OEM. A continuación vamos a generar un proyecto WPF y utilizaremos el Crystal Report para generar un reporte.

Manos a la obra, si utilizamos la versión Visual Studio 2010, debemos de descargar e instalar el Crystal Report, ya que cuando se liberó esta versión del Visual Studio no se incluyó el Crystal, pero esto no quiere decir que no podemos utilizarlo, basta con descargar e instalarlo.

Creamos un nuevo proyecto WPF.




Una vez creado el proyecto tenemos que agregar un nuevo reporte así que le damos clic derecho a nuestro proyecto, Seleccionamos Agregar > Nuevo elemento… > Reporting > Crystal Report, Asegúrate de utilizar la versión del “Framework 4 Completa”  Si utilizas las versión “Client Profile” te dará algunos errores al ejecutar tu programa.





Creamos el reporte como Informe en blanco, esto debido a que  por cuestiones de ejemplo, llenaremos el reporte manualmente desde un Data Set.



Ahora hemos creado el reporte en blanco y se mostrara de la siguiente forma.


Una vez creado el reporte en blanco se agregan automáticamente las referencias de Crystal Report (dll) tal y como se muestra en la siguiente imagen:




Ahora para poder hacer uso del Report Viewer tenemos que agregar manualmente las siguientes referencias “SAPBusinessObjects.WPF.Viewer” y “SAPBusinessObjects.WPF.ViewerShared”, estas referencias las encontramos en la carpeta de instalación del Crystal Report.

"SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\SAP BusinessObjects Enterprise XI 4.0\win32_x86\dotnet"

Para agregar las referencias damos clic derecho sobre nuestro proyecto > Agregar referencia > pestaña Examinar, tal y como se muestra en la imagen siguiente:



Ahora Procedemos a agregar el Report Viewer a nuestra interfaz, será el contenedor encargado de mostrar nuestro reporte, para agregarlo tenemos que incluir la referencia del visor, tal y como se muestra en la imagen:




Ahora Agregamos el Visor a nuestra interfaz con el siguiente código:


Ahora solo tenemos que diseñar nuestro reporte y enlazarlo a alguna fuente de datos.  

Vamos a crear nuestro Data Set desde el diseñador, para esto agregamos un data set a nuestro proyecto de la siguiente manera Clic derecho sobre el proyecto > Agregar  > Nuevo elemento > Pestaña Datos y seleccionamos “Conjunto de Datos”.


Ahora  en la vista diseñador del Data Set Damos clic derecho sobre cualquier parte y agregamos una tabla de datos y seguidamente agregamos las columnas  que necesitemos quedando de la siguiente manera.



Debemos definir el tipo de datos de cada columna, esto lo hacemos en la propiedad “DataType”  de cada columna  en este caso pondremos de tipo String.

Ahora ya tenemos listo nuestro Data Set nos falta enlazarlo a nuestro reporte y llenarlo, para enlazarlo a nuestro reporte nos vamos a nuestro vista diseño de reporte y en la pestaña Explorador de Campos le damos clic derecho en “Campos de base de datos” y seguidamente en “Asistente de base de datos”, se abrirá una ventana donde tendremos que escoger nuestro data set y  agregarlo, tal y como se muestra en la siguiente imagen:


Ahora para agregar darle un formato a nuestro reporte tenemos un cuadro de herramientas donde encontraremos “texto, líneas, cuadros”  estos nos servirán para diseñar nuestro reporte.  Y para enlazar los datos de nuestro campo de base de datos solo basta con arrastrar el campo hacia el reporte, aquí aremos uso de nuestra imaginación para crear el reporte a nuestro gusto.



Ahora solo ponemos unos bloques de texto, unas cajas de texto  y un botón en nuestra interfaz con la intención de meter los datos que llevara nuestro reporte y después generarlo, el código XAML quedara de la siguiente manera:




Y nuestra interfaz de la siguiente manera:


Ahora en el Code Behind (C#) en el evento del botón enlazamos los datos y mostramos el reporte de la siguiente manera:



Ahora para que no nos genere algún error debemos de agregar el siguiente fragmento de código dentro de archivo de configuración de nuestra aplicación app.config quedando de la siguiente manera:




Ahora solo basta ejecutar nuestro programa ingresar los datos y generar nuestro reporte, recuerda que este ejemplo esta de manera básica, pero tú puedes validar campos, eventos e incluso crear formulas avanzadas en el reporte y en la aplicación solo basta un poco de imaginación, espero que te sirva esta pequeña ayuda y de ser así no seas por favor Comenta!

El resultado:

El código del programa puedes encontrarlo en el siguiente enlace: 
Descargar

¡No te olvides de comentar!

Edder Rosado Lira

9 comentarios:

  1. Bajando y lo probare.

    Se ve sencillo y facil.

    Excente aporte.

    ResponderBorrar
  2. Hola de casualidad no sabes como habilitar los botones para guardar, exportar y esos???

    ResponderBorrar
  3. HOLA soy leandro; es excelente tu aporte me ayudo mucho pero ahora tengo este problema y no se porque sucede e investigado y nada tan solo si conocen la solución para este se los agradecería pq ya me esta volviendo loco....

    System.Reflection.Adds.UnresolvedAssemblyException
    El Universe de tipos no puede resolver el ensamblado: Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.
    en System.Reflection.Adds.AssemblyProxy.GetResolvedAssembly()
    en System.Reflection.Adds.AssemblyProxy.GetHashCode()
    en MS.Internal.Features.AdornerProviderFeatureConnector.FeatureProvidersAdded(ModelItem item, IEnumerable`1 extensions)
    en
    Mi correo es leandrogarcia.net@hotmail.com

    ResponderBorrar
  4. Hola que tal, gracias por leerme, me pregunto desde donde lo haces;
    Debido a que no tengo el conocimiento real de lo que intentas hacer, voy a tratar de adivinar un poco, lo primero que te pediría que intentaras hacer es que en las propiedades de tu proyecto principal(interfaz, consola, etc.) definas el framework completo ya que cuando creas un proyecto si estas trabajando con el framework 4.0 el visual studio te asigna la versión
    ".Net framework 4 Client Profile" verifica si tienes esta y de tenerla cámbiala a la siguiente ".Net Framework 4";

    Ahora otra cosa muy importante es que definas la siguiente linea de código en tu archivo de configuración de tal manera que tu archivo de configuracion app.config se vea de la siguiente forma:









    De no tener estas lineas en tu archivo de configuración agrégalas, en caso de tenerlas solo comenta las que tienes y pon las que te estoy pasando.

    fuera de estos detalles técnicos, sería bueno si especificaras un poco lo que intentas hacer, para entender mejor el error, espero poder ayudarte que tengas un excelente noche y persevera sigue intentándolo, solo así encontraras la solución.

    ResponderBorrar
  5. Muy buenos días Edder agradezco su atención

    Me sucede lo siguiente estoy diseñando un aplicativo en wpf y c# en realidad apenas estoy comenzando a programar en este lenguaje porque antes programaba en Visual Basic me aparecido espectacular por los recursos gráficos, pero bueno en realidad tengo dos grandes dudas realice un contenedor q es un TabControl pq según e investigado wpf no maneja MDI entonces los formularios los diseñe en UserContros y luego los contengo en pestañas o TabItems pero cuando contengo el usercotrol q tiene el crystalReport no hay problema me muestra el objeto como tal y no hay problema pero cuando llamo otra pestaña el objeto como tal del Crystal desaparece o no se visualiza .

    Con relación al problema q te envíe solo me aparece en tiempo de diseño pero se vuelve fastidioso pq no me deja visualizar ningún objeto entonces toca buscarlos en el XAML y editarlos por código. Pero ello hasta el momento no me afectado en tiempo de ejecución pero al igual es bastante complicado trabajar así. Esto comenzó cuando comencé a trabajar con el CrystalReport los informes de estos los tengo en un proyecto dentro de las misma solución. no se si sera que falta actualizar algo o diferenciarlo al igual ya hice todo lo q me mencionaste pero nada sigue el mismo problema me tomo el atrevimiento de enviarte patallasos del aplicativo como tal para hacerme entender mejor.

    De ante mano te agradezco la ayuda q me puedas ofrecer, pq en realidad ya son dos las dificultades que e tenido con este proyecto y me encuentro desesperado pq tengo mucha presión de sacar este aplicativo con relación a la perseverancia créeme que es un gran concejo pq lo que se lo e aprendido empíricamente pq el desarrollo de software me apasiona. Quedo infinitamente agradecido por dar respuesta a mis dudas y problemas.

    ResponderBorrar
  6. Leandro, te envíe un correo, para que pueda ayudarte saludos.

    ResponderBorrar
  7. Edder Nuevamente realice el crystal report en un page de wpf pero en el primer pantallaso me funsiona corre normal pero cuando navego por otras paginas y regreso a la pagina q contenia el report el CrystalReportsViewer desaparece no se visualiza tengo graves problemas con ello no se si tu tengas una explicacion o respuesta para ello.

    ResponderBorrar
  8. Edder te envie un correo con adjunto con el proyecto de prueba....
    Gracias ..

    ResponderBorrar
  9. Muy bueno el ejemplo, tengo un reporte en el cual he creado 3 parametros, como hago para enviar los valores de los parametros por codigo?? y que no me aparesca la ventanita del crystal que me pide los parametros??, mi correo es salgueirodavid@gmail.com

    ResponderBorrar

Copyright © Edder Rosado Lira | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com