重复RDLC ReportViewer子报表

时间:2018-09-20 14:44:16

标签: c# rdlc reportviewer

我真的是RDLC的新手,所以如果我缺少明显的内容,请原谅我。

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

是否可以为数据集中的每个记录重复此子报表?我认为让我感到困惑的是主RDLC没有专门加载各个子报表的代码,因此我看不到任何可以包含循环或任何内容的地方。

1 个答案:

答案 0 :(得分:6)

如果您没有特殊需要,我想知道可以将Rectangle放在Tablix单元格中,然后将其用作TextBox的简单控件的容器很重要,LineImage等根据需要进行布局。

如果仍然需要使用子报表,可以将SubReport放在Tablix单元中,并解决在处理子报表时发生的LocalReport.SubreportProcessing事件中的任何问题。

如果您有很多记录,则可以使用单个Dataset并使用SubreportProcessing中已设置的子报告ParametersDesigner 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

例如,使用包含主数据和明细数据的DataSet,您可以构建按IdMaster分组的主报告,并将子报表放在明细部分。

main report

这是子报表:请注意,DataSet与主报表相同,但我们还需要2个ParametersIdMasterIdRow)才能显示正确的数据。

sub report

在主报告中,您需要将子报告Parameters链接到DataSet的实际值。

sub report parameter

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

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

这是结果:

result

正如我在答案开头所述,如果您没有特殊需要,可以使用Rectangle代替SubReport。对于此示例,您可以使用绿色的Rectangle作为容器来获得相同的结果。

rectangle