【问题标题】:Passing Parameters to Sub Reports in RDLC Under VS 2010VS 2010下RDLC中子报表的参数传递
【发布时间】:2013-01-25 22:34:59
【问题描述】:

目前我正在使用 ASP.Net 4.0 和 2010 RDLC 设计器在 VS 2010 中开发一个报告网站。我正在构建的报表类似于主从报表,但我正在尝试使用嵌套表来实现。

我的问题是我试图将字段值从我的主报告传递到子报告。表设置如下所示:

2 表

第一个表:[记录 ID、名称、日期、] 第二个表:[RecordID, Description, DueDate]

我想做的是这样的表格:

-------------------
|  Name  |  Date  |
------------------------------------
   |  Description1 |  DueDate      |
------------------------------------
   |  Description2 |  DueDate      |
------------------------------------
| Name2 | Date2 |
-----------------

包含子报告的 Description 和 DueDate bieng 部分的条目。

当我尝试将 RecordID 作为参数传递给子报表时,我必须在子报表的 XML 中手动定义它,因为我在设计器 UI 中找不到任何允许我将报表参数添加到RDLC 文件,我从主报告中收到一条错误消息:

An error occurred during local report processing.
Value cannot be null. Parameter name: value 

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

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

有没有人知道是什么原因造成的?

【问题讨论】:

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


    【解决方案1】:

    我实际上最终弄清楚了这一点。

    如果您使用的是 Visual Studio 2010,则需要进入报表定义文件并确保 报表数据 窗口已打开。

    如果您找不到它,请转到查看并单击报告数据。

    打开窗口后,右键单击 Parameters 文件夹并在其中添加参数。

    确保在参数声明框中选择允许空值允许空白值(如果它是文本类型)。这应该可以阻止该错误的发生。

    出于某种原因,即使我总是有一个值,但对于本地报告,它会使用 null 初始化报​​告参数,如果您不允许空值/空白,它会引发该错误。

    【讨论】:

    • 谢谢@Philter。我遇到了同样的问题,您的回答让我足够接近意识到我在父报告和子报告之间的参数名称中有错字不匹配。 注意:我不必设置 Allow Null ValueAllow Blank Value 来让我的参数值通过。
    【解决方案2】:

    似乎没有人理解子报表数据需要根据主报表列值显示/过滤。很抱歉抱怨,但花了很长时间后,我想通了。

    我们需要在子报表中定义上面提到的报表参数,我们需要将参数值传递给子报表使用的数据源来显示子报表数据。下面给出的是 sn-p。我使用 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
    

    【讨论】:

    • 很好的补充,但这与这个问题所涉及的问题并不真正相关。大多数关于带有参数的本地子报表的教程都会告诉您必须将它们提供给子报表。问题在于,由于参数的类型,它们需要被允许为空和空白,即使提供了离散值。
    • 您好,能否请您提供上面的C#代码?我有同样的问题,我需要根据报告参数过滤我的数据集以获取子报告。谢谢!
    【解决方案3】:

    我刚从 VS2005 转换报告时遇到了同样的事情。无论如何,我发现的另一件事是必须在两个地方设置参数...

    首先,在子报告版本中,您必须声明您希望收到的参数及其各自的类型。

    此外,在主报表中,如果您右键单击子报表的属性,则有一个“参数”部分,您希望将其传递给子报表。这将来自将驱动子报告的主报告中的任何记录基础。

    只是想将此作为澄清传递给可能遇到或正在学习在 VS2010 中处理子报告的其他人。

    【讨论】:

    • 好主意,我忘了在我原来的问题中提到这一点。看起来 SRSS 中的子报表总体上非常笨重。
    猜你喜欢
    • 2011-11-15
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多