重复RDLC ReportViewer子报表

Joh*_*nes 17 c# reportviewer rdlc

我是RDLC的新手所以请原谅我,如果我错过了一些明显的东西.

我有一些需要重复的数据,基于1:链接到主报表的数据集.它不能以表格形式显示,因为客户希望以特定方式布局,因此使用Tablix控件.我在这个主报告中有一些基于1:1数据集的子报告,一切都很酷.我为这个新数据集创建了一个子报告,并将其添加到主RDLC报告中.一切正常,但它只包括数据集的第一条记录.

是否可以为数据集中的每条记录重复此子报表?我认为令我困惑的是主要的RDLC没有专门加载各个子报告的代码,因此我没有看到任何可以包含循环或任何东西的地方.

tez*_*zzo 6

如果你没有特别的要求,我想知道,你可以把一个很重要RectangleTablix细胞,然后用它作为简单的控件容器TextBox,Line,Image等laied出你想要的.

如果您仍然需要使用报表,你可以把一个SubReportTablix细胞,并在解决任何问题LocalReport.SubreportProcessing时,处理的报表时发生的事件.

如果您有大量记录,则可以使用单个记录DatasetSubreportProcessing使用Parameters您已设置的子报表在事件中对其进行过滤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
Run Code Online (Sandbox Code Playgroud)

例如,使用DataSet包含主数据和详细信息数据的数据,您可以构建按主题报告分组IdMaster并在子详细信息部分中放置子报表.

主要报告

这是子报告:请注意,DataSet它与主报告相同,但我们还需要2 Parameters(IdMasterIdRow)来显示正确的数据.

分报告

在主报表中,您需要将子报表链接Parameters到实际值DataSet.

子报告参数

然后,最重要的部分:SubreportProcessingHandler事件.在主报表中为子报表的每个实例触发此事件,因此如果您有100行/ 100个子报表,则此事件将触发100次:每次需要指定要显示的数据时,都必须过滤DataSet使用上一步中定义的2 Parameters(IdMasterIdRow)并填充来自主报告的值.

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
Run Code Online (Sandbox Code Playgroud)

这是结果:

结果

正如我在答案开头所说,如果你没有特殊需要,你可以用a Rectangle而不是a SubReport.关于此示例,您可以使用绿色Rectangle作为容器获得相同的结果.

长方形