Joh*_*nes 17 c# reportviewer rdlc
我是RDLC的新手所以请原谅我,如果我错过了一些明显的东西.
我有一些需要重复的数据,基于1:链接到主报表的数据集.它不能以表格形式显示,因为客户希望以特定方式布局,因此使用Tablix控件.我在这个主报告中有一些基于1:1数据集的子报告,一切都很酷.我为这个新数据集创建了一个子报告,并将其添加到主RDLC报告中.一切正常,但它只包括数据集的第一条记录.
是否可以为数据集中的每条记录重复此子报表?我认为令我困惑的是主要的RDLC没有专门加载各个子报告的代码,因此我没有看到任何可以包含循环或任何东西的地方.
如果你没有特别的要求,我想知道,你可以把一个很重要Rectangle的Tablix细胞,然后用它作为简单的控件容器TextBox,Line,Image等laied出你想要的.
如果您仍然需要使用报表,你可以把一个SubReport在Tablix细胞,并在解决任何问题LocalReport.SubreportProcessing时,处理的报表时发生的事件.
如果您有大量记录,则可以使用单个记录Dataset并SubreportProcessing使用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(IdMaster和IdRow)来显示正确的数据.
在主报表中,您需要将子报表链接Parameters到实际值DataSet.
然后,最重要的部分:SubreportProcessingHandler事件.在主报表中为子报表的每个实例触发此事件,因此如果您有100行/ 100个子报表,则此事件将触发100次:每次需要指定要显示的数据时,都必须过滤DataSet使用上一步中定义的2 Parameters(IdMaster和IdRow)并填充来自主报告的值.
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作为容器获得相同的结果.