Creación de Reportes con Crystal Report con Visual Studio 2010 en Windows Form.
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.
Materiales
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
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
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
Una vez conectada la base de datos podemos ver las tablas que esta BD contiene.
Ahora agregamos un Data Set a nuestro proyecto.
Colocamos el nombre de dsProductoPorCategoria.xsd. Arrastramos la tabla para que el reporte pueda usarlo como fuente de datos.
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
Cuando agregamos el reporte usaremos el asistente de informe para ayudarnos en la configuración del reporte.
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
Vemos la tablas relacionadas y damos siguiente
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.
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.
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.
En esta sección podemos ordenar por los grupos superiores o inferiores pero por defecto elegimos ninguno.
Agregamos el grafico al reporte (grafico circular o de torta)
Si deseamos realizar una sub agrupación podemos seleccionar en esta ventana pero para nuestro caso es innecesario.
Finalmente nuestro informe está concluido.
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.
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.
Ahora llamamos este método en el evento Load del formulario.
Finalmente ejecutamos el reporte y vemos como nuestro reporte se generado con éxito.
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.
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:
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í
Miguel Espinoza dijo:
20 abril, 2011 a 12:08
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.
edwin quispe dijo:
30 abril, 2011 a 16:01
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:
2 mayo, 2011 a 11:55
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
Alex dijo:
6 mayo, 2011 a 11:32
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
Victor Fdz dijo:
6 mayo, 2011 a 16:03
Hola que tal, me podrias mandar el código a mi correo, esque no me deja descargarlo.
Saludos!
Giovanni Vladimir dijo:
8 mayo, 2011 a 1:25
claro enviame tu correo
Giovanni Vladimir dijo:
8 mayo, 2011 a 1:25
claro enviame tu correo a gvcallisaya@hotmail.com
maicol dijo:
5 julio, 2011 a 19:33
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:
7 julio, 2011 a 18:07
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.
Jano García Montero dijo:
15 junio, 2011 a 16:50
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:
17 junio, 2011 a 0:40
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.
Omar Loaiza J. dijo:
29 julio, 2011 a 17:13
Graciasp por este post, logre solucionar el problema. Solo hay que seguir los pasos.
Manuel dijo:
8 agosto, 2011 a 20:15
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:
14 agosto, 2011 a 22:01
Tales no estas pasando los datos correctamente verifica que la conexión se estableció y que los datos están correctos
carlos dijo:
13 agosto, 2011 a 10:51
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:
14 agosto, 2011 a 21:53
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
carlos dijo:
15 agosto, 2011 a 18:28
Te agradezco tu tiempo y buena disposición voy a probar
carlos dijo:
15 agosto, 2011 a 18:30
si pudieras mandar un ejemplo seria muy didáctico ya que creo que a muchos colegas les podría servir
carlos dijo:
15 agosto, 2011 a 18:50
revise bien y en las propiedades no aparece “ningun destination = 1 printer” como en cr 8.5
Manuel dijo:
16 agosto, 2011 a 7:39
Gracias mi pana, muy bueno tu comentarios me han servido de ayuda
Alfonso C dijo:
12 septiembre, 2011 a 20:49
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)?
giancastillo2010 dijo:
20 septiembre, 2011 a 19:51
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:
20 septiembre, 2011 a 20:26
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
Cristhiam Paul dijo:
25 octubre, 2011 a 23:42
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……..
Guillermo Jimenez dijo:
11 noviembre, 2011 a 8:19
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.
Nuncia dijo:
28 noviembre, 2011 a 12:53
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
Gustavo Soto dijo:
6 diciembre, 2011 a 22:34
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.
Alma dijo:
24 diciembre, 2011 a 19:18
Graaaacias muchas gracias
Alex dijo:
28 enero, 2012 a 14:37
buenas….
y si quisiera direccionar el reporte directo a una impresora, sin necesidad de tener una vista previa???
thony dijo:
31 enero, 2012 a 18:14
bien chvere el tutorial..
ahora mismo lo estoy probando
gracias…
jose serrano dijo:
14 febrero, 2012 a 16:05
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.