【问题标题】:SSRS Sub-Report only using default parameter to create dataset, even though parameter is successfully being passed from the main reportSSRS 子报表仅使用默认参数创建数据集,即使参数已从主报表成功传递
【发布时间】:2015-12-22 16:45:11
【问题描述】:

在过去一年半左右的时间里,我一直在与 SSRS 合作。我从中知道的一切都是通过反复试验和谷歌学习的。所以希望我的术语是正确的,但如果我说错了,请原谅我。

我正在使用 Visual Studios 2015,连接到 SQL 2012 服务器。我正在创建一个 asp.net/VB Web 应用程序来在本地站点上显示 SSRS 报告。到目前为止,我的所有报告都是没有子报告的单一报告。如果需要“支持报告数据”,我创建了一个钻取,使用一个操作来导航到一个完全独立的页面。这对我所有的报告都非常有效,但现在我想变得更漂亮一点。

我一直在尝试创建包含子报告的 SSRS 报告。主报告包含有关已运行的特定产品批次的摘要信息(图中表格的蓝色和白色部分)。 如果用户想查看批次的更具体的详细信息,他们可以点击“处理订单”列的展开/折叠按钮,摘要行下方将出现一个子报告,其中包含有关批次的更具体信息(子报告是浅灰色/深灰色的表格)。

我将主报表上的属性配置为将 ProcessOrder 值作为参数传递给子报表,并在子报表上创建一个参数以接受此参数。

您可以看出此参数已成功传递,因为我已将相应的参数传递并显示在表格上方(并且它与主表格上的数字匹配)。从图片中可以看出,我还在子报告表本身上显示了 Process Order 编号,这个编号与传递给报告的编号不同。它显示一个“1”,这是我在我的 aspx 页面上为 SQLDataSource 控件提供的用于构建数据集的默认值。我尝试不设置“默认值”,但随后出现以下错误: “子报告'test_Sub_Report2'的数据检索失败,位于:[硬盘驱动器上的位置]请查看日志文件以获取更多信息。” 以前有没有人遇到过这个问题,或者任何人都可以给我一个从这里开始的方向的想法?我觉得我已经很接近了,因为我将参数成功传递给子报告,但是数据集只是没有使用该参数从 SQL 中获取数据,我不知道如何告诉它这样做。

我可以添加更多详细信息并发布更多实际代码,只需让我知道您需要什么,我会尽力为您提供。我会添加更多截图,但我还没有足够的代表点数。

【问题讨论】:

  • 您没有提到您在什么时候将子报告上的参数映射到填充子报告的数据集。您做了什么来期望您的子报表数据应该与传递的参数相关而不是默认值 1?
  • 也许这就是我失败的地方。我已将子报表对象包含在我的主报表中,位于 tablix 的详细信息行中。在该子报告中,我进入了“参数”选项卡上的属性,并选择了 [PROCESS_ORDER] 字段以传递给参数@processOrder。然后在子报告中,我创建了一个参数 processOrder,并假设它将使用该参数来构建数据集。我在网上找到的一切都表明它应该那么容易。如果没有,我不确定在何处或如何将传递的参数从主报表链接到子报表的数据集创建
  • 这是我试图弄清楚时遵循的教程。这似乎对他有效:youtube.com/watch?v=6S8Zzqthsbw

标签: asp.net sql-server vb.net reporting-services reporting


【解决方案1】:

您需要进入填充子报表的数据集,然后转到“参数”选项卡,并将数据集的 ProcessOrder 参数映射到您将 ProcessOrder 参数传递给主报表的变量.

【讨论】:

  • 我不确定你的意思。在我的主报告中,我进入了子报告的属性到参数选项卡,并将参数设置为从那里传递。这就是子报表获取要显示的数字的方式,但它只是不使用数字来构建数据集,而是使用 asp SQLDataSet 控件的默认值。
  • 您的意思是这个报表正在被添加到一个 ASP 页面,并且子报表正在使用来自 ASP 页面的数据集而不是 SSRS 中的数据集?
  • 我不知道另一种方法。我在每个 SSRS 中有一个数据集;主报表:DataSet1,子报表:DataSet2。在我的 asp 页面上,我有一个报表查看器控件,它指定报表将有两个报表数据源,我使用 SqlDataSource 控件链接到报表。这也是我将参数从两个日期选择器字段和文本框加载到主报告中的方式。
  • 好的,按照我在回答中所说的做,但是在 SSRS 中做。不在 ASP 中。在您的子报告中,确保您的 tablix 使用 SSRS DataSet2 作为它的数据源,而不是 ASP 数据源。
  • 据我所知,asp 页面上的 SqlDataSource 控件与 SSRS 中的 DataSet 一起使用来填充页面。这就是它在我所有其他报告中的工作方式,这两部分都是必需的。但是在子报表的情况下,我无法使用传递的参数来填充子报表数据集,它只会使用来自 asp SQLDataSource 的默认值。我已将流程订单与主报告中的参数链接到 RDLC 上的子报告参数,但从一开始就是这样。
【解决方案2】:

我最终找到了答案。我在这个问题上使用了@Lazy Coder 的答案:SubReport is not working after adding parameter 我错误地将参数添加到子报告中。我确实通过我的主报告上的表格将它们传递给子报告,该表格正在获取子报告的参数,但子报告没有使用这些值来创建数据集。在我的 test_page.aspx.vb 文件中,我必须更改我的 SubReportProcessing 事件处理程序。我需要在那里显式设置参数值。自从我最初发布此问题以来,我还在我的存储过程中添加了另一个参数 subTotalTime,以正确过滤我的结果。

Public Sub SetSubDataSource(sender As Object, e As SubreportProcessingEventArgs)
    Dim report = DirectCast(sender, LocalReport).DataSources(0)
    Dim subProcessOrder = e.Parameters("subProcessOrder").Values(0)
    Dim subTotalTime = e.Parameters("subTotalTime").Values(0)
    SqlDataSource_PPMS_test_Sub_Page.SelectParameters(1).DefaultValue = subProcessOrder
    SqlDataSource_PPMS_test_Sub_Page.SelectParameters(2).DefaultValue = subTotalTime
    e.DataSources.Add(New ReportDataSource("DataSet2", SqlDataSource_PPMS_test_Sub_Page))
End Sub

SqlDataSource_PPMS_test_Sub_Page 是我的 SqlDataSource 对象在我的 aspx 页面上的 id。

【讨论】:

    猜你喜欢
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    相关资源
    最近更新 更多