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: