将参数从 ReportViewer 传递到 s-s-rS 报告的存储过程数据源

Posted

技术标签:

【中文标题】将参数从 ReportViewer 传递到 s-s-rS 报告的存储过程数据源【英文标题】:Passing parameters from ReportViewer through to stored procedure data source for s-s-rS report 【发布时间】:2011-04-29 23:05:49 【问题描述】:

我正在为 s-s-rS 2008 R2 的 BIDS 开发一份报告,该报告使用存储过程作为其数据源。我已经在报告中设置了参数,报告将它们传递给存储过程,一切正常。但是,我现在需要转换报表,以便它获取从 C# ASP.Net 应用程序中的 ReportViewer 控件传递给它的参数,而不是允许在 s-s-rS 界面中输入它们。我认为我在 C# 方面很好(使用 ServerReport.SetParameters),但我不知道如何在 BIDS 中将这些传入的参数值路由到存储过程。谁能举个例子?

我还需要阻止报表显示用于输入参数的 UI。我应该将参数设置为隐藏还是内部?

【问题讨论】:

【参考方案1】:

我会将报告参数设置为内部,但请阅读这篇文章 http://msdn.microsoft.com/en-us/library/aa337234.aspx 的隐藏和内部参数部分,并自行决定适合该问题的方法。

假设你有一个类似的存储过程

CREATE PROCEDURE dbo.RepeatAfterMe
(
    @inputText varchar(50)
,   @repeatFactor int = 10
)
AS
BEGIN
    SET NOCOUNT ON
    DECLARE @count int
    DECLARE @hack TABLE (inputText varchar(50))

    SET @count = 0
    WHILE @count < @repeatFactor
    BEGIN
        INSERT INTO @hack SELECT @inputText
        SET @count = @count + 1
    END
    SELECT H.* FROM @hack H
END
GO

在 s-s-rS 中定义 2 个报表参数(InputText 为字符串,RepeatFactor 为整数)。然后,在您的 s-s-rS 中,您的数据集将被定义为

执行 dbo.RepeatAfterMe @inputText, @repeatFactor

然后在数据集的参数选项卡上,它看起来像

@inputText =Parameters!InputText.Value 
@repeatFactor =Parameters!RepeatFactor.Value

为了解决方案的完整性,这是我用来将参数传递到 ID 为 rvReportViewer 的报告控件的代码的近似值

Microsoft.Reporting.WebForms.ReportParameter[] reportParameters = null;
reportParameters = new Microsoft.Reporting.WebForms.ReportParameter[2];
reportParameters[0] = new Microsoft.Reporting.WebForms.ReportParameter("inputText", txtInput);
reportParameters[1] = new Microsoft.Reporting.WebForms.ReportParameter("repeatFactor", 10);
try

    rvReportViewer.ServerReport.SetParameters(reportParameters);

catch(Microsoft.Reporting.WebForms.ReportServerException ex)

    Response.Redirect("~/Error.aspx");

【讨论】:

以上是关于将参数从 ReportViewer 传递到 s-s-rS 报告的存储过程数据源的主要内容,如果未能解决你的问题,请参考以下文章

从 reportviewer 向报表服务器传递凭据时未经授权

将 DataTable 绑定到 RDLC 和 ReportViewer

在运行时将数据源绑定/重新绑定到 reportviewer vb.net

ReportViewer 报表使用整理

s-s-rS 报表查看器无法将凭据从超链接传递到报表服务器

ReportViewer 15.0.0 渲染:Sys.ArgumentNullException:值不能为空。参数名称:元素