Poblar un Crystal Report en Visual Studio 2008

Población de un Crystal Report

Crear una aplicación es tan fácil y tan sencillo, que se nos olvida por completo que no solo es de aprender a manipular y modificar datos. Es por eso que me tome un poquitín de mi tiempo para realizar este pequeño tutorial, el cual tiene como objetivo poblar un Crystal Report.

Lo primero que tenemos que hacer es crear un DataSet con las siguientes tablas...
Nota: "No voy a dar tanto rodeo para explicar como crear un DataSet y todo esto"



Ya que se tenga el DataSet con los datos y la relación… seguirá lo siguiente.
Crear un Reporte de CrystalReport, lo pueden hacer desde un asistente o manualmente (Del mismo modo no voy a dar tantos rodeos en esto).















Ya que agregaron el CrystalReport y lo poblaron con los datos que deseen, se tiene que crear un nuevo formulario, en el cual se agregara un CrystalView para que en este se pueda agregar la hoja de reporte o reportes.














Ya que se tiene el CrystalView en el panel de Propiedades hay una propiedad llamada “ReportSource” el cual enlaza la hoja de reporte antes diseñada al CrystalView.
Pero no todo termina en esto… si lo ejecutan no funcionara… ¿porque?... realmente cuando se diseña el Reporte solo agregamos los campos que serán rellenados posteriormente, ahora viene esta parte, la que todos les gusta. “Codificación
Nota: Agrega este codigo en el formulario en donde se encuentre el CrystalView, esto se realizara en el evento del Load, lo que hara es que recopilara los datos que se deseen y los mostrara en el CrystalView.


Private Sub Crystal_Report_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Primero Creamos los objetos que vamos a utilizar para poblar un DataGridView
' El GridView que esta en el formulario se llama "Datos"
' Error "The value's length for key 'data source' exceeds it's limit of '128'"

' Creamos los componenetes para obtener los datos.
Dim CadenaConexion As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename='" _
& My.Application.Info.DirectoryPath & "\BaseDatos.mdf';Integrated Security=True;User Instance=True")
Dim DatosDS As New BaseDatosDataSet
Dim DatosDAC As New SqlDataAdapter("SELECT * FROM TB_CLIENTE", CadenaConexion)
Dim DatosDAP As New SqlDataAdapter("SELECT * FROM TB_PEDIDO", CadenaConexion)


' Utilizamos un TryCatch para capturar un error y asi no pueda afectar a la Base de datos
Try
' Abrimos la conexion y poblamos el DataSet y posteriormente cerramos la conexion
' -NOTA- : Recuedo que estoy usando Adaptadores para realizar consultas a la base de datos
' de forma desconectada, para no consumir recursos.

CadenaConexion.Open()
DatosDAC.Fill(DatosDS.TB_Cliente)
DatosDAP.Fill(DatosDS.TB_Pedido)
CadenaConexion.Close()

' Cargamos los datos recolectados en un Crystal Report y lo cargamos al CrystalView
Dim miReporte As New RepClientes
miReporte.SetDataSource(DatosDS)
Me.CrystalReportViewer1.ReportSource = miReporte

' Liberamos memoria
DatosDS.Dispose()
DatosDAC.Dispose()
DatosDAP.Dispose()

Catch ex As Exception
MsgBox("Mensaje : " & ex.Message)
End Try
End Sub

Ya que se tiene hecho todo lo anterior solo falta ver el resultado.











Y por ultimo si quiere filtrar los datos solo es de cambiar las sentencias SQL en los DataAdapter

Dim DatosDAC As New SqlDataAdapter("SELECT * FROM TB_CLIENTE WHERE CLIENTEID = 2", CadenaConexion)
Dim DatosDAP As New SqlDataAdapter("SELECT * FROM TB_PEDIDO WHERE FECHA = '13/02/2008'", CadenaConexion)

y el resultado sera el siguiente:


























20 comentarios:

Alejandro García dijo...

Gracias Cuate, me sirvio de mucho ahora ya puedo hacer mis reportes, partiedo de esto básico...

Salutaris...

fabian dijo...

hola tengo una duda:

uso el siguiente codigo

dim cmd as new sqlcommand
cmd.connection=conex (conex es una cadena de coneccion ya
definida)
cmd.commandtext="select * from sitio where sitio="sitio1" (asi
quiero
filtrar)
dim ada as new sqladapter
dim ds as new dataset
ada.selectcommand=cmd
ada.fill(ds)

asi lleno el dataset y luego lo enlazo al crystalreportviewer sin problemas,, pero ahora:

que campos utilizo para mostrar la informacion filtrada en el reporte
uso formulafields?, databasefields? y como los relaciono con el filtrado que quiero hacer segun mi query

agradecido de antemano

Oskar dijo...

Hola! Estoy haciendo una aplicación Web.
Tengo el dataset, lo cargo , relaciono la página aspx con el componente crystal, vamos, que hago todo bien. Pero no me carga.
Yo creo que me falta el codigo ese que pones.

No sé donde ponerlo, alguna idea?

Estoy perdidísimo.

kyzer dijo...

Hola,

Gracias por tu Ayuda. Ahora bien, te debo comentar algo; tu comentario de lo "fácil" de crea aplicaciones es un tanto erronea. Si bien, realizar tu ejemplo si lo es, crear una aplicación profesioneal dista mucho de ser algo fácil y simple.
1) nunca se debe programar en la página.
2) los dataset son algo mas para enseñanza mas que para trabajar.
3) en vez de un dataset es mejor por ejemplo enviar una lista de productos, donde producto es nuestro objeto que maneja un producto y la lista de ellos maneja por ejemplo todos los producto, entonces es mas descriptivo el desarrollo que un dataset (que no nos indica nada).
4) nunca se debe hacer un select *
bueno, quizas dejaste el select * como mal ejemplo, pero bueno, de todos modos buen comentario del cristal report.

se agradece

Toto dijo...

he implementado el reporte tal como lo mencionas y me sale un error en la siguiente linea

Dim miReporte As New RepClientes

(El tipo no esta definido -- RepClientes)

RchukyR dijo...

muchas gracias por la ayuda!!! funciono tal cual lo pusiste!!

Pluma Aguda dijo...

Al fin alguien explica que además de diseñar graficamente hay que escribir codigo para visualizar los datos. Gracias sensei

ericka dijo...

hola que tal... quisiera saber si alguien me puede describir de manera mas detallada de como enlazar el dataset con el crystal report con access, ya que no tengo experiencia en esto y me dejaron hacer un reporte de calificaciones de alumnos, les agradeceria me ayudaran... gracias...

Ricardo dijo...

/// Hola,

Gracias por tu Ayuda. Ahora bien, te debo comentar algo; tu comentario de lo "fácil" de crea aplicaciones es un tanto erronea. Si bien, realizar tu ejemplo si lo es, crear una aplicación profesioneal dista mucho de ser algo fácil y simple.
1) nunca se debe programar en la página.
2) los dataset son algo mas para enseñanza mas que para trabajar.
3) en vez de un dataset es mejor por ejemplo enviar una lista de productos, donde producto es nuestro objeto que maneja un producto y la lista de ellos maneja por ejemplo todos los producto, entonces es mas descriptivo el desarrollo que un dataset (que no nos indica nada).
4) nunca se debe hacer un select *
bueno, quizas dejaste el select * como mal ejemplo, pero bueno, de todos modos buen comentario del cristal report.

se agradece

31 de mayo de 2008 19:56

////


Estoy de acuerdo, con lo que comenta Kyzer, antes de escribir y explicar algo pienzo que se tienen que acalrar las cosas, en fin como tutorial sirve y muy bueno desde luego pero nada mas, para los demas tenemos que aplicar lo que ya se dijo.

Saludos.

Nuavamente esta bueno lo mostrado.

Saludos.

Sandrita dijo...

Hola!
Viejo soy Novato en la programacion y he visto tu tutorial y esta muy bacano pero no lo entiendo mucho con los DataSet y otros me votan error y como soy novato no entiendo, yo utilizo para imprimir PrintForm, se q se mira maluco pero es la unica forma q me se y quiero aprender hacerlas con crystal report y tambien lo necesito q me llame los datos desde la base de datos(SQL SERVER 2008) te agradeceria si tvieras un tutorial un poco mas claro o si tienes un video en donde lo hagas te lo agradeceria michisimo. este es mi correo paraque me puedas ayudar gracias...

y felicidades por el aporte.

Edwin Cieza Mostacero dijo...

Excelente amigos!!

burrero dijo...

para los que tengan problemas con miReporte.SetDataSource=DatosDs

la inicializacion es asi en VS2008

dim miReporte as New CrystalDecisions.CrystalReports.Engine.ReportClass

Unknown dijo...

no he probado el resultado pero todo es logica, cuando nos topamos con cosas como pero de donde saco que el rptinforme me marca error esto el otro bueno la razon es que debemos de crear nuestros propios dataset y demas objetos de lo contrario no existiran en el caso de los ejemplos cuando dice dim mireporte as new reportillo2 pues es logico que debe de existir ese reporte de lo contrario siempre marcara error, despuesd e tanto hablar lo unico que me queda por decir es que si tiene alguien por ahi ejemplos de como manda los datos de un GridView a un Reporte en Crystal Saludos ...........

programer dijo...

y como puede hacer para al finalizar cada hoja me muestre la suma de los datos de esa hoja? no se si me explico

$@NTO$ dijo...

quiciera que me dieran su correo para adjuntarles un prequeño ejercicio en el cual llamo a un reporte desde visual studio 2010 he intentado con este codigo y me da error en la libreria del crustal reports.

$@NTO$ dijo...

quiciera que me dieran su correo para adjuntarles un prequeño ejercicio en el cual llamo a un reporte desde visual studio 2010 he intentado con este codigo y me da error en la libreria del crustal reports.

Unknown dijo...

Al entrar a ver la página me pide logearme

"The report you requested requires further information."

como Servername me agrega el nombre del Dataset, alguien sabe como solucionar eso?

Alonso dijo...

Exelente tutorial loco espero que sigas adelante con tu blog tienes muchos conocimientos para compartir, gracias me sirvio de mucho!!

pacman dijo...

excelente tutorial, pero seria bueno que hiciera uno orientado a las personas que estamos comenzando a programar.... debido a que pueden surgir muchas dudas en el camino...

si es posible poderlo contactar por email para futuras consultas ...

gracias...

Magnus Alexander dijo...

Eres el primer tutorial sensato que veo, y me has ayudado con los problemas que nomas no podía arreglar, te agradezco mucho, he podido hacer lo que necesitaba gracias a tu tutorial.