Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在SSRS中传递参数_C#_Asp.net_Reporting Services - Fatal编程技术网

C# 如何在SSRS中传递参数

C# 如何在SSRS中传递参数,c#,asp.net,reporting-services,C#,Asp.net,Reporting Services,我是SSRS的新手,一直在传递参数。目前我正在做以下工作: ReportViewer1.ServerReport.ReportPath = ConfigurationManager.AppSettings["serverPath"] + "MyReport"; List<ReportParameter> paralist = new List<ReportParameter>(); ReportParameter reportParam1

我是SSRS的新手,一直在传递参数。目前我正在做以下工作:

ReportViewer1.ServerReport.ReportPath = ConfigurationManager.AppSettings["serverPath"] + "MyReport";
List<ReportParameter> paralist = new List<ReportParameter>();                
ReportParameter reportParam1 = new ReportParameter("LocationId", txtLocationId.Text);
ReportParameter reportParam2 = new ReportParameter("PrdAcctId", txtProductAccountId.Text);
ReportParameter reportParam3 = new ReportParameter("FromDate", frmdt);
ReportParameter reportParam4 = new ReportParameter("ToDate", todt);
ReportParameter reportParam5 = new ReportParameter("IntAmt", todt);
paralist.Add(reportParam1);
paralist.Add(reportParam2);
paralist.Add(reportParam3);
paralist.Add(reportParam4);
paralist.Add(reportParam5);
ReportViewer1.ServerReport.SetParameters(paralist);
ReportViewer1.ServerReport.ReportPath=ConfigurationManager.AppSettings[“serverPath”]+“MyReport”;
List paralist=新列表();
ReportParameter reportParam1=新的ReportParameter(“LocationId”,txtLocationId.Text);
ReportParameter reportParam2=新的ReportParameter(“PrdAcctId”,txtProductAccountId.Text);
ReportParameter reportParam3=新的ReportParameter(“FromDate”,frmdt);
ReportParameter reportParam4=新的ReportParameter(“ToDate”,todt);
ReportParameter reportParam5=新的ReportParameter(“IntAmt”,todt);
paralist.Add(reportParam1);
paralist.Add(reportParam2);
paralist.Add(reportParam3);
paralist.Add(reportParam4);
paralist.Add(reportParam5);
ReportViewer1.ServerReport.SetParameters(paralist);
当设置了参数数量时,此功能可以正常工作。但在某些情况下,参数的数量将在运行时根据用户输入的内容决定

现在我不知道如何使.rdl文件中的参数数量灵活。例如,根据用户输入,可以有n个FromDate和ToDate以及相应的IntAmt


如果您能在这方面提供帮助,我将不胜感激。

您可以调用GetParameters方法获取所有当前报表参数,并循环查看每个参数是什么以及每个参数的各种属性:

首先:


ReportParameterInfo集合参数=ReportViewer1.ServerReport.GetParameters()

您可以调用GetParameters方法来获取所有当前报表参数,并循环查看每个参数是什么以及每个参数的各种属性:

首先:


ReportParameterInfo集合参数=ReportViewer1.ServerReport.GetParameters()

您可以尝试以下方法,它可以工作-用参数的序号值替换索引0:

if (this.rptView.ServerReport.GetParameters()[0].Values.Count > 0)
{
    string parvalue = this.rptView.ServerReport.GetParameters()[0].Values.ToString();
    paramList.Add(new ReportParameter("ReportName", parvalue));
}

您可以尝试以下方法,它可以工作-用参数的序号值替换索引0:

if (this.rptView.ServerReport.GetParameters()[0].Values.Count > 0)
{
    string parvalue = this.rptView.ServerReport.GetParameters()[0].Values.ToString();
    paramList.Add(new ReportParameter("ReportName", parvalue));
}

这不是对你问题的直接回答。我们的主页使用
window.href
重定向到报表呈现页面,并将参数作为查询字符串传递

注意:这是VB.Net代码,您可以将其转换为等效的C代码

代码隐藏

Public Function GetParametersList(ByVal reportRDLName As String) As List(Of String)
    'Get these values from database. Following is a sample
    Dim parametersList As New List(Of String)()
    parametersList.Add("plantcd")
    parametersList.Add("CountID")
    Return parametersList
End Function

Public Function GetReportPath(ByVal reportRDLName As String) As String
    'Get these values from database. Following is a sample
    Dim reportPath As String = "/MyFolder/MyModule/"
    Return reportPath
End Function

Protected Overrides Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

    '--------------------------------------------------------
    Me.EnableViewState = True

    If Not Page.IsPostBack Then

        vwreports.ServerReport.ReportServerCredentials = New MyCustomReportServerCredentials
        vwreports.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote
        vwreports.ServerReport.ReportServerUrl = New Uri(ConfigurationManager.AppSettings("MyReportServer"))



        Dim reportRDLName As String = Request.QueryString("rname").ToString()
        Dim parametersList As List(Of String) = GetParametersList(reportRDLName)
        Dim reportPath As String = GetReportPath(reportRDLName)

        Dim countOfParameters As Integer = parametersList.Count
        Dim parms As ReportParameter() = New ReportParameter(countOfParameters - 1) {}
        Dim iterationCount As Integer = 0

        For Each parameterName As String In parametersList
            Dim parameterValue As String = Convert.ToString(Request.QueryString(parameterName))
            If Not [String].IsNullOrEmpty(parameterValue) Then
                parms(iterationCount) = New ReportParameter(parameterName, parameterValue)
                iterationCount += 1
            End If
        Next

        vwreports.ServerReport.ReportPath = reportPath + reportRDLName
        vwreports.ServerReport.SetParameters(parms)
        vwreports.ShowParameterPrompts = False
        vwreports.ServerReport.Refresh()


    End If
End Sub

这不是对你问题的直接回答。我们的主页使用
window.href
重定向到报表呈现页面,并将参数作为查询字符串传递

注意:这是VB.Net代码,您可以将其转换为等效的C代码

代码隐藏

Public Function GetParametersList(ByVal reportRDLName As String) As List(Of String)
    'Get these values from database. Following is a sample
    Dim parametersList As New List(Of String)()
    parametersList.Add("plantcd")
    parametersList.Add("CountID")
    Return parametersList
End Function

Public Function GetReportPath(ByVal reportRDLName As String) As String
    'Get these values from database. Following is a sample
    Dim reportPath As String = "/MyFolder/MyModule/"
    Return reportPath
End Function

Protected Overrides Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

    '--------------------------------------------------------
    Me.EnableViewState = True

    If Not Page.IsPostBack Then

        vwreports.ServerReport.ReportServerCredentials = New MyCustomReportServerCredentials
        vwreports.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote
        vwreports.ServerReport.ReportServerUrl = New Uri(ConfigurationManager.AppSettings("MyReportServer"))



        Dim reportRDLName As String = Request.QueryString("rname").ToString()
        Dim parametersList As List(Of String) = GetParametersList(reportRDLName)
        Dim reportPath As String = GetReportPath(reportRDLName)

        Dim countOfParameters As Integer = parametersList.Count
        Dim parms As ReportParameter() = New ReportParameter(countOfParameters - 1) {}
        Dim iterationCount As Integer = 0

        For Each parameterName As String In parametersList
            Dim parameterValue As String = Convert.ToString(Request.QueryString(parameterName))
            If Not [String].IsNullOrEmpty(parameterValue) Then
                parms(iterationCount) = New ReportParameter(parameterName, parameterValue)
                iterationCount += 1
            End If
        Next

        vwreports.ServerReport.ReportPath = reportPath + reportRDLName
        vwreports.ServerReport.SetParameters(parms)
        vwreports.ShowParameterPrompts = False
        vwreports.ServerReport.Refresh()


    End If
End Sub

检查这个:还有另一个:谢谢Davide的努力,但在我的情况下,参数的数量没有设置。传递null不是问题。用户可以只输入一个FromDate、ToDate和IntAmt,也可以输入多个FromDate、ToDate和IntAmt。我想要的是访问所有这些SSR。我认为将这些值串接在字符串中,然后在SSRS中拆分它们可能会奏效。您如何能够在SSRS报告中拥有数量可变的参数?报表中的参数数量通常由基础查询或存储过程中的参数数量决定。你是如何克服的?(或者你的问题是因为你没能回答?)检查这个:还有另一个:谢谢你的努力,Davide,但在我的情况下,参数的数量没有设置。传递null不是问题。用户可以只输入一个FromDate、ToDate和IntAmt,也可以输入多个FromDate、ToDate和IntAmt。我想要的是访问所有这些SSR。我认为将这些值串接在字符串中,然后在SSRS中拆分它们可能会奏效。您如何能够在SSRS报告中拥有数量可变的参数?报表中的参数数量通常由基础查询或存储过程中的参数数量决定。你是如何克服的?(或者您的问题是因为您无法回答吗?)未设置参数的数量。它可以是2、4、6或。。。。基于用户输入。对,但调用GetParameters将返回一个参数集合,您可以检查这些参数以查看设置了哪些参数及其值。还是我不理解你的问题?我想这是因为“集合”这个词。让我解释一下场景:用户可以通过UI输入n个值。我必须将这些值作为参数发送到报表。现在由于值的数量可能不同,我不能在.RDL文件中声明固定数量的参数。参数的数量没有设置。它可以是2、4、6或。。。。基于用户输入。对,但调用GetParameters将返回一个参数集合,您可以检查这些参数以查看设置了哪些参数及其值。还是我不理解你的问题?我想这是因为“集合”这个词。让我解释一下场景:用户可以通过UI输入n个值。我必须将这些值作为参数发送到报表。现在由于值的数量可能不同,我不能在.RDL文件中声明固定数量的参数。