Uso de crystal reports en VB.NET
Bueno... tomando en cuenta todos los problemas que puede llegar a dar el manejo de reportes, es viable apuntar que tanto CrystalRepots Como .Net hacen una gran pareja para el trabajo ordenado y confiable.
Iniciemos
1- Elaboro un reporte fuera de .NET [osea desde el mismo CR] , el cual lleva absolutamente todo lo que necesito osea que si lo ejecuto desde CR este dara los resultados deseados, el reporte puede haber sido creado partiendo de un procedimiento almacenado[SP] o directamente de un grupo de tablas o vistas.
Ahora lo que necesitamos es que .Net deploye el reporte previamente elaborado.
Para el ejemplo elabore un reporte el cual fue hecho a partir de un SP [procedimiento almacenado], el cual solicita tres parametros, por ende dichos parametros tengo que enviarlos desde .Net para que sean a su vez capturados por CR y los pueda procesar.
parametros solicitados por el reporte

OK. OK.
Ahora en VB.Net crearemos un nuevo proyecto y en el formulario de inicio [Form1] agregaremos un control CrystalReportViewer1, en la propiedad Dock le colocamos Fill

Espacios de nombre utilizados:
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
En el evento load del Fom1 colocaremos el siguiente codigo.
' ---------------------------By CesarL-------------- ' SETEANDO CONEXION PARA CR Dim oConexInfo
As ConnectionInfo
Dim oListaTablas
As Tables
Dim oTabla
As Table
Dim oTablaConexInfo
As TableLogOnInfo
' instanciar objeto para guardar datos de conexión oConexInfo = New ConnectionInfo()
oConexInfo.ServerName = "NombreServidor"
oConexInfo.DatabaseName = "NombreBaseDatosODBC"
oConexInfo.UserID = "Usuario"
oConexInfo.Password = "Password"
Dim rpt_id
As New ReportDocument
' Comprobamos la existencia del reporte, si el reporte no existe abortamos si no continuamos Dim Reporte
As String = Application.StartupPath &
"Reporte.rpt" If Not IO.File.Exists(Reporte)
Then MessageBox.Show(
"No se encontro reporte:" & vbCrLf & _
Reporte
, "Report Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.Close()
Exit Sub End If'Una vez verificado el reporte procedemos a cargarlo rpt_id.Load(Reporte)
oListaTablas = rpt_id.Database.Tables
For Each oTabla
In oListaTablas
oTablaConexInfo = oTabla.LogOnInfo
oTablaConexInfo.ConnectionInfo = oConexInfo
oTabla.ApplyLogOnInfo(oTablaConexInfo)
'ENVIANDO VARIABLE A CR rpt_id.SetParameterValue(
"@FechaInicio",
"VariableFechaInicial")
rpt_id.SetParameterValue(
"@FechaFin",
"VariableFechaFinal")
rpt_id.SetParameterValue(
"@Company",
"VariableCompany")
Me.CrystalReportViewer1.ReportSource = rpt_id
Con esto el form1 cuando cargue hara lo siguiente
1- Seteara las variables de conexion
2- Comprobara la existencia del reporte
3- Si el reporte existe este creara una instancia de tipo CR y enviara los parametros de conexion y los parametros del reporte
4- Finalmente cargara el reporte.
Si quieres los fuentes, dudas o comentrios: cesarlopez1909@gmail.com
