c# - 重复 RDLC ReportViewer 子报表
问题描述
我对 RDLC 真的很陌生,所以如果我遗漏了一些明显的东西,请原谅我。
我有一些数据需要重复,基于链接到主报告的 1:Many 数据集。它不能以表格方式显示,因为客户希望它以特定方式布局,因此无法使用 Tablix 控件。在这个主报告中,我有许多基于 1:1 数据集的子报告,所有这些都很酷。我为这个新数据集创建了一个子报表,并将其添加到主 RDLC 报表中。一切正常,但它只包括数据集的第一条记录。
是否可以为数据集中的每条记录重复此子报表?我认为让我感到困惑的是主要的 RDLC 没有专门加载各个子报告的代码,所以我看不到任何明显的地方可以包含循环或任何东西。
解决方案
如果您没有特殊需求,我认为重要的是要知道您可以将 aRectangle
放入Tablix
单元格中,然后将其用作简单控件的容器,如TextBox
、Line
、Image
等,根据需要布置。
如果您仍然需要使用子报表,您可以在单元格中放入一个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
例如,使用DataSet
包含主数据和明细数据的 a,您可以构建一个按分组分组的主报表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
这是结果:
正如我在答案开头所说,如果您没有特殊需求,可以使用 aRectangle
而不是 a SubReport
。关于此示例,您可以使用绿色Rectangle
作为容器获得相同的结果。
推荐阅读
- java - Java API 可用于阅读 GMAIL 吗?
- bash - 将前导零添加到特殊标签之间的数字
- python - Cuda 和 pytorch 内存使用情况
- scala - Scala Doobie 在使用 OR WHERE 时不返回任何内容
- android - notifyDataSetChanged() 在 MVP android 中不起作用
- jekyll - Jekyll 无法从集合中找到包含文件
- c++ - 在对象初始化之前访问 C++ std::vector 对象成员
- swift - 运行单元测试用例时无法加载模块
- c# - 我无法理解下面的 c# 代码片段
- python - 为什么在这个 Python 示例中 + 运算符的优先级高于 *?