在VS 2010下将参数传递给RDLC中的子报告

时间:2010-10-25 20:23:50

标签: asp.net visual-studio-2010 reportviewer rdlc

目前,我正在使用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 

所以它似乎在它到达子报告加载点之前出错了。

我正在将数据发送到主报告中,如果我从子报表中删除参数,数据就会通过。但是如果我添加参数,报告会抛出错误。

有没有人对可能导致这种情况的原因有任何想法?

3 个答案:

答案 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中处理子报告的人。