c# - reporte - Repetir un subinforme RDLC ReportViewer
subinformes en reportviewer (1)
Si no tiene necesidades particulares, creo que es importante saber que puede colocar un Rectangle
en la celda de Tablix
y luego usarlo como un contenedor para controles simples como TextBox
, Line
, Image
, etc. colocados como desee.
Si aún necesita usar un subinforme, puede poner un SubReport
en la celda Tablix
y resolver cualquier problema en el evento LocalReport.SubreportProcessing
que ocurre cuando se procesa un subinforme.
Si tiene muchos registros, puede usar un solo Dataset
y filtrarlo en el evento SubreportProcessing
, utilizando los Parameters
subinforme que ya estableció en el Designer Mode
.
Private Sub SubreportProcessingHandler(sender As Object, e As SubreportProcessingEventArgs)
Dim dvFiltered As New DataView(Me.YourDataSet.Tables(0))
dvFiltered.RowFilter = "Parameter1 = " & CInt(e.Parameters.Item("yourParameter1").Values(0)) & " AND " _
& "Parameter2 = ''" & CStr(e.Parameters.Item("yourParameter2").Values(0)) & "''"
e.DataSources.Add(New ReportDataSource("YourDataSourceName", dvFiltered.ToTable("YourDataSourceName")))
End Sub
Por ejemplo, al utilizar un DataSet
que contiene datos maestros y detalles, puede crear un informe principal agrupado por IdMaster
y colocar un subinforme en la sección de detalles.
Este es el subinforme: tenga en cuenta que el DataSet
es el mismo que el informe principal, pero también necesitamos 2 Parameters
( IdMaster
e IdRow
) para mostrar los datos correctos.
En el informe principal, debe vincular los Parameters
subinformes a los valores reales de DataSet
.
Luego, la parte más importante: el evento SubreportProcessingHandler
. Este evento se activa para cada instancia del subinforme en el informe principal, por lo que si tiene 100 filas / 100 subinformes, este evento se activará 100 veces: cada vez que necesite especificar qué datos desea mostrar, debe filtrar DataSet
utilizando los 2 Parameters
( IdMaster
e IdRow
) definidos en el paso anterior y llenos de valores provenientes del informe maestro.
Private Sub SubreportProcessingHandler(sender As Object, e As SubreportProcessingEventArgs)
Dim dvTest As New DataView(Me.dsTest.Tables(0))
dvTest.RowFilter = "IdMaster = " & CInt(e.Parameters.Item("parIdMaster").Values(0)) & " AND " _
& "IdRow = " & CInt(e.Parameters.Item("parIdRow").Values(0))
e.DataSources.Add(New ReportDataSource("DataSet_TEST", dvTest.ToTable("DataSet_TEST")))
End Sub
Este es el resultado:
Como dije al comienzo de la respuesta, si no tiene necesidades particulares, puede usar un Rectangle
lugar de un SubReport
. Respecto a este ejemplo, puede obtener el mismo resultado utilizando el Rectangle
verde como contenedor.
Soy realmente nuevo en RDLC, así que perdóneme si me falta algo obvio.
Tengo algunos datos que necesitan repetirse, en base a un conjunto de datos 1: Muchos que está vinculado al informe principal. No es algo que se pueda mostrar de forma tabular porque los clientes quieren que se distribuya de manera específica, por lo que no se puede utilizar el control de Tablix. Tengo varios subinformes basados en conjuntos de datos 1: 1 en este informe principal, y todo está bien con esos. Creé un subinforme para este nuevo conjunto de datos y lo agregué al informe principal de RDLC. Todo funciona bien, pero solo incluye el primer registro del conjunto de datos.
¿Es posible repetir este subinforme para cada registro en el conjunto de datos? Creo que lo que me confunde es que el RDLC principal no tiene un código que cargue específicamente los subinformes individuales, por lo que no veo ningún lugar obvio donde pueda incluir un bucle o algo.