【问题标题】:Properly passing my parameters in SSRS report on ASP.net page在 ASP.net 页面上的 SSRS 报告中正确传递我的参数
【发布时间】:2013-02-04 14:40:04
【问题描述】:

我已经非常接近解决我花了几天时间解决的问题。

我正在尝试将参数传递给 ASP.net 页面上的 SSRS 报告。用户在前一页选择2个选项,节目(3个节目的下拉列表)和期间(日期)。

我可以得到一些东西,但不是我想要的。这是用户选择要在报告中显示的内容的页面:

        ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('Bill Created!');window.open('../demographics/supbillrpt.aspx?prog=fprogram&period=cperiod','_self');", true);

fprogram 是:

        SqlParameter param2 = new SqlParameter();
        param2 = command.Parameters.Add("@program", SqlDbType.Char);
        param2.Value = fprogram;

cperiod 是同一个东西,但它是一个日期。

这是显示报告的页面背后的代码:

        String sprogram = Request.QueryString[0];
        String speriod = Request.QueryString[1];

        ReportViewer1.ProcessingMode = ProcessingMode.Remote;
        ReportViewer1.Width = 800;
        ReportViewer1.Height = 600;
        IReportServerCredentials irsc = new CustomReportCredentials();
        ReportViewer1.ServerReport.ReportServerCredentials = irsc;
        ReportViewer1.ServerReport.ReportPath = "/sup_billing/Report1";
        ReportViewer1.ServerReport.Refresh();
        ReportParameter p = new ReportParameter("prog", sprogram);                      ReportViewer1.ServerReport.SetParameters(new ReportParameter[] { p });
        ReportParameter p2 = new ReportParameter("period", speriod); ReportViewer1.ServerReport.SetParameters(new ReportParameter[] { p2 });

我得到的是程序是空白的,句号是“cperiod”

我尝试了一些不同的方法来让它作为变量读取,但似乎没有任何效果。

如果我输入以下内容:

ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('Bill Created!');window.open('../demographics/supbillrpt.aspx?prog=VEX&period=cperiod','_self ');", true);

VEX 是该下拉列表中的一个项目,并且会显示出来,因为我把它放在那里。但用户不会总是选择 VEX,所以我需要使用 fprogram 变量。有什么建议吗?

【问题讨论】:

  • 我有点困惑。你说“fprogram is ...”并包含一个c#片段,它本身包含对变量fprogram的引用?您实际上在查询字符串中传递了什么?
  • fprogram 是用户从下拉列表中选择的项目。也许我正在以错误的方式解决这个问题。我想传递该用户选择的参数,但这里是传递参数的地址部分: ('../demographics/supbillrpt.aspx?prog=fprogram&period=cperiod','_self') 所以不是抓取用户选择的参数,它只是读作“fprogram”。我尝试用单引号和可以想象的每种语法包围 fprogram,但我无法让它像用户选择的那样传递
  • 对不起,如果我让您感到困惑 - 我对此比较陌生,并且很难措辞以便其他程序员能够理解它。为了进一步简化:用户选择程序、日期期间,然后点击“账单报告”按钮。这应该将他们带到带有这些选定参数的报告页面。而且我似乎无法让那些选定的参数通过。
  • 好的,我想我明白你的问题是什么了。我会写一个答案,我们会看看它是否有帮助。
  • 我的报告页面后面的代码会保持不变吗?您发布的代码仅用于 Bill 按钮背后的代码,对吧?

标签: c# asp.net


【解决方案1】:

我假设您的第一个代码片段是您正在使用的实际代码,而不是代码一般形式的模型。我进一步假设您有名为fprogramcperiod 的变量。

您需要构建查询字符串以反映您希望传递的确切值。遗憾的是,您不能对要用作值源的变量的名称进行编码并插入实际值。

所以你的代码应该是这样的:

// I am assuming you're getting your fprogram and cperiod values from controls.  The 
// control names are of course up to you.

string fprogram = ddlProgram.SelectedValue;
string cperiod =  txtPeriod.Text;  // I'm assuming this contains a formatted date.

string queryString = String.Format(
     "../demographics/supbillrpt.aspx?prog={0}&period={1}", 
     fprogram, 
     cperiod);
string script = String.Format(
     "alert('Bill Created!');window.open('{0}','_self');",
     queryString);

ClientScript.RegisterStartupScript(this.GetType(), "Alert", script, true);

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多