Principales respuestas
Problema con el paso de parámetros a subreportes

Pregunta
-
Buenas!!
El problema es el siguiente: tengo un reporte con Crystal Report 10.2 en VS2005, el cual posee 5 subreportes, en donde cada uno de los cuales está conectado a un SP Oracle. Tanto el reporte principal como los subreportes poseen parámetros, los cuales son los equivalentes a los de entrada en cada SP que se invoca. Le estoy estableciendo la conexión y los parámetros a través del siguiente código:
Estableciendo parámetros a un reporte con subreportes:Sub armarReporte()
'rescatar los parámetros de la sesión para pasarlos a los subreportes
intMes = CInt(Session.Item("intMes"))
intAnio = CInt(Session.Item("intAnio"))
intTipo = CInt(Session.Item("intTipo"))
strNombre = CStr(Session.Item("strNombre"))
'leer user y password (keys del web.config) para la BD a conectarse
Dim strDBUser As String = ConfigurationManager.AppSettings.Get("DBUser").ToString
Dim strDBPassword As String = ConfigurationManager.AppSettings.Get("DBPassword").ToString
'crear instancia de reporte
Dim documentoReporte As New ReportDocument
'establecer ruta del .rpt a la instancia
Dim strRutaReporte As String
strRutaReporte = Me.Server.MapPath("Rpt\Reporte1.rpt")
documentoReporte.Load(strRutaReporte, OpenReportMethod.OpenReportByTempCopy)
'establecer conexión del reporte a la BD
documentoReporte.SetDatabaseLogon(strDBUser, strDBPassword)
With documentoReporte
'establecer parámetros al reporte (principal)
.SetParameterValue("PNMES", intMes)
.SetParameterValue("PNANIO", intAnio)
.SetParameterValue("PVNOMBRE", strNombre)
'establecer los parámetros a los subreportes
'1
.SetParameterValue("PNMES", intMes, "Subreporte1")
.SetParameterValue("PNANIO", intAnio, "Subreporte1")
.SetParameterValue("PNTIPO", intTipo, "Subreporte1")
'2
.SetParameterValue("PNMES", intMes, "Subreporte2")
.SetParameterValue("PNANIO", intAnio, "Subreporte2")
'3
.
.
.
End With
'establecer fuente al objeto CrystalReportViewer
Me.crvVisor.ReportSource = documentoReporte
crvVisor.RefreshReport()
crvVisor.DataBind()
End Sub
Lo bueno es que no arroja excepciones, pero lo malo es que al mostrar la página .aspx que contiene al objeto CrystalReportViewer, no se muestra el reporte correctamente, sino que una página en la cual se solicitan todos los parámetros del reporte (principal y subreportes). Qué estoy haciendo mal o me falta hacer?? cómo puedo arreglar esto?? Cualquier ayuda se agradecerá!!
Respuestas
-
Problema resuelto!!!
Al código anterior, en la línea donde se establece la conexión, reemplacen la misma por las siguientes:
Código faltante:'establecer conexión con BD al reporte principal
For Each connection In documentoReporte.DataSourceConnections
Select Case connection.ServerName
Case strDBName
connection.SetLogon(strDBUser, strDBPassword)
End Select
Next
'establecer conexión a los subreportes
Dim subreport As ReportDocument
For Each subreport In documentoReporte.Subreports
For Each connection In subreport.DataSourceConnections
Select Case connection.ServerName
Case strDBName
connection.SetLogon(strDBUser, strDBPassword)
End Select
Next
Next
...en donde strDBName es el nombre de su Base de Datos.
Procuren también dejar la propiedad ReportSourceID en blanco si es que van a alimentar el CrystalRerportViewer a través de código y no utilizando un CrystalReportSource, como en mi caso. Además, hay que eliminar la línea "crvVisor.RefreshReport()", siempre y cuando la propiedad ReuseParameterValuesOnRefresh del CrystalReportViewer esté en "False", pues se recomienda dejarla en "True". Les dejo el código a aquellos que hayan tenido un problema similar a este.
Salu2!!!
Todas las respuestas
-
Problema resuelto!!!
Al código anterior, en la línea donde se establece la conexión, reemplacen la misma por las siguientes:
Código faltante:'establecer conexión con BD al reporte principal
For Each connection In documentoReporte.DataSourceConnections
Select Case connection.ServerName
Case strDBName
connection.SetLogon(strDBUser, strDBPassword)
End Select
Next
'establecer conexión a los subreportes
Dim subreport As ReportDocument
For Each subreport In documentoReporte.Subreports
For Each connection In subreport.DataSourceConnections
Select Case connection.ServerName
Case strDBName
connection.SetLogon(strDBUser, strDBPassword)
End Select
Next
Next
...en donde strDBName es el nombre de su Base de Datos.
Procuren también dejar la propiedad ReportSourceID en blanco si es que van a alimentar el CrystalRerportViewer a través de código y no utilizando un CrystalReportSource, como en mi caso. Además, hay que eliminar la línea "crvVisor.RefreshReport()", siempre y cuando la propiedad ReuseParameterValuesOnRefresh del CrystalReportViewer esté en "False", pues se recomienda dejarla en "True". Les dejo el código a aquellos que hayan tenido un problema similar a este.
Salu2!!!
-
hola q tal
creo q llegue un poquito tarde al tema, quiero hacerle una pregunta a Carlos Acaíno:
en el codigo q pones en tu for each se lee una variable "connection" mi pregunta es ¿como la declaro, me refiero a q tipo ?recien empiezo a programar disculpa mi ignorancia... espero tu respuesta.... se agredecera mucho :)