目前,我正在使用ASP.Net 4.0和2010 RDLC设计器在VS 2010中的报告网站上工作。我正在构建的报告类似于Master-detail报告,但我正在尝试使用嵌套表格。
我的问题是我正在尝试将主报告中的字段值传递给子报告。表格设置如下所示:
2桌
第一张表:[RecordID,Name,Date,] 第二张表:[RecordID,Description,DueDate]
我想要做的是这样一个表:
-------------------
| Name | Date |
------------------------------------
| Description1 | DueDate |
------------------------------------
| Description2 | DueDate |
------------------------------------
| Name2 | Date2 |
-----------------
使用描述和DueDate bieng条目作为子报告的一部分。
当我尝试将RecordID作为参数传递给子报表时,我必须在子报表的XML中手动定义,因为我无法在设计器UI中找到允许我添加报表参数的任何位置RDLC文件,我从主报告中得到一个错误:
An error occurred during local report processing.
Value cannot be null. Parameter name: value
所以它似乎在它到达子报告加载点之前出错了。
我正在将数据发送到主报告中,如果我从子报表中删除参数,数据就会通过。但是如果我添加参数,报告会抛出错误。
有没有人对可能导致这种情况的原因有任何想法?
答案 0 :(得分:10)
我实际上最终搞清楚了。
如果您使用的是Visual Studio 2010,则需要进入报告定义文件并确保报告数据窗口已打开。
如果找不到,请转到“查看”并单击“报告数据”。
打开窗口后,右键单击参数文件夹并在其中添加参数。
在参数声明框中,如果是文本类型,请确保选择允许空值和允许空值。这应该可以阻止这种错误发生。
出于某种原因,即使我总是有一个值,使用本地报告它会使用null初始化report参数,如果你不允许空值/空格,则会抛出该错误。
答案 1 :(得分:1)
似乎没有人理解需要根据主报告列值显示/过滤子报告数据。很抱歉抱怨,但花了很长时间后,我想出来了。
我们需要在子报表中定义上面提到的报表参数,我们需要将参数值传递给子报表使用的数据源以显示子报表数据。下面给出的是片段..我使用了ObjectDataSource来填充子报告。
Public Sub SubreportProcessingEventHandler(ByVal sender As Object, ByVal e As SubreportProcessingEventArgs)
'e.Parameters.Item(0) is the report parameter defined in Sub-report
ObjectDataSource2.SelectParameters("Param1") = New Parameter("Param1", DbType.Int32, e.Parameters.Item(0).Values(0))
ObjectDataSource2.SelectParameters("Param2") = New Parameter("Param2", DbType.String, e.Parameters.Item(1).Values(0))
e.DataSources.Add(New ReportDataSource("SubReportDataSourceName", ObjectDataSource2))
End Sub
答案 2 :(得分:0)
我刚刚遇到了从VS2005转换报告的事情。无论如何,我发现的另一件事是参数必须设置在两个地方......
首先,在子报告版本中,您必须声明您要接收的参数及其各自的类型。
此外,在MAIN报告中,如果右键单击子报告属性,则有一个“参数”部分要传递给子报告。这将来自主报告中将驱动子报告的任何记录基础。
只是想通过这个来澄清其他可能会遇到或只是学习在VS2010中处理子报告的人。