Sintomas
Creas un informe RDLC con subreports mediante visual studio.
Cargas dinámicamente el informe pero se produce un error al cargar el subinforme.
No encuentra el archivo.
Por otro lado ¿Cómo cargas los datos del subinforme.
Soluciones:
Debes cargar dinámicamente con loadsubrepordefinitión el subinforme utilizando como nombre del report el Reportname (el que rellenas en usar este informe como subinforme de las propiedades) y no el del subinforme dentro del informe.
Ejemplo:
Dim informe As New LocalReport
Dim lector As New System.IO.StreamReader(My.Request.PhysicalApplicationPath + "\ListadoOrgsProd.rdlc")
informe.LoadReportDefinition(lector)
lector.Close()
lector = New System.IO.StreamReader(My.Request.PhysicalApplicationPath + "\ListadoProd.rdlc")
informe.LoadSubreportDefinition("ListadoProd.rdlc", lector)
lector.Close()
AddHandler informe.SubreportProcessing, AddressOf infoParametros
Por cierto que en la última línea se resuelve como establecer los datos de subinforme: hay que hacer establecer mediante addHandler la referencia a un procedimiento que se dispará cuando vaya a procesarse el informe:
Sub infoParametros(ByVal sender As Object, ByVal e As SubreportProcessingEventArgs)
e.DataSources.Add(New ReportDataSource("dsProductos", datosProd))
End Sub
5 comentarios:
Por favor, me puedes decir como acoplas "informe" generado con Localreport al reportViewer.
No conozco Visual Estudio 2010. tengo el problema de que no me funciona el subreport. Gracias
En lugar de la variable declarada informe utilizas reportviewer1.localreport. Y al final le haces un refresh
Dim lector As New System.IO.StreamReader(My.Request.PhysicalApplicationPath + "\ListadoOrgsProd.rdlc")
ReportViewer1.LocalReport.LoadReportDefinition(lector)
lector.Close()
lector = New System.IO.StreamReader(My.Request.PhysicalApplicationPath + "\ListadoProd.rdlc")
ReportViewer1.LocalReport.LoadSubreportDefinition("ListadoProd.rdlc", lector)
lector.Close()
AddHandler reportviewer1.localreport.SubreportProcessing, AddressOf infoParametros)
ReportViewer1.LocalReport.Refresh()
Puedes ver un articulo relacionado en http://www.codeproject.com/KB/aspnet/ReportViewer.aspx
Debo decirte que yo no uso el report viewer sino que devuelvo directamente un pdf.
Para ellos añades al final:
Dim bytes = informe.Render("PDF")
Response.Clear()
Response.ContentType = "Application/PDF"
Response.AddHeader("content-disposition", String.Format("attachment; filename={0}.PDF", director.Pagina.TipoObjetoActualDescrito(infopagina.numero.plural)))
Response.BinaryWrite(bytes)
Disculpa, mas legible así.
Dim bytes = informe.Render("PDF")
Response.Clear()
Response.ContentType = "Application/PDF"
Response.AddHeader("content-disposition","nombreArchivo.PDF")
Response.BinaryWrite(bytes)
Hola, sigo los pasos que comentáis y no me da ningún error, pero una vez que tengo todos los datos cargados en el ReportDataSource y empieza a generar el informe me aparece el comentario de espera "Cargando" y no muestra el informes.
Podéis ayuderme
Un saludo y muchas gracias
Publicar un comentario