0

我在 2012 asp.net Web 表单应用程序中使用 asp.net 报告查看器控件来处理 2012 SQL Server Reporting Service 报告,这些报告是远程 rdl 格式的报告。

在这些 rdl 报告文件上,有预先构建的自定义 UI 字段,例如下拉列表、文本框、复选框。这些 UI 字段与用户输入参数相关。并且报表查看器代码不提供 UI 参数。

隐藏参数由 asp.net 报表查看器的代码提供,并且在报表查看器的 SubmittingParameterValues 事件处理程序中为:

  protected void ReportViewer1_SubmittingParameterValues(object sender, ReportParametersEventArgs e)
            {
                if (e != null)
                {
                    e.Parameters.Add(new ReportParameter("HiddenWebLoginUserIdParameter", webLoginUserIdVariable ));
                }
            }

每当用户按下报告上的“查看报告”按钮时,该事件的代码就可以正常工作。但是,如果我在包含报表查看器的 aspx 页面的Page_Load 事件处理程序上添加该隐藏参数(“HiddenWebLoginUserIdParameter”),则报表上的其他用户输入 UI 参数将被破坏(下拉列表不是从 SSRS 填充的,等)一旦运行报告。我想从报表查看器控件传递隐藏参数,以便在首次加载 aspx Web 表单时可以使用隐藏参数。中断代码行看起来像(Page_Load 事件处理程序中的最后一个代码行):

protected void Page_Load(object sender, EventArgs e)
    {
       ....

            ReportViewer1.ServerReport.ReportPath = "MyReportPath";
            ReportViewer1.ServerReport.ReportServerUrl = new Uri(MyReportServerUrl);


            ReportViewer1.ServerReport.SetParameters(new ReportParameter("HiddenWebLoginUserIdParameter", webLoginUserIdVariable ));
        }

        ...
    }  

我的问题:
我不知道为什么在 Page_Load 事件处理程序中添加隐藏参数不起作用并破坏 SSRS 报告上的其他 UI 字段参数,而在 SubmittingParameterValues 事件处理程序中这样做确实有效。任何帮助是极大的赞赏。

4

2 回答 2

0

我相信您正在使用 SetParameters 覆盖参数集合,本质上是清除其他参数。您将需要存储当前参数并同时设置所有参数。

于 2013-07-12T13:36:53.030 回答
0

你应该把这些语句放在if (!Page.IsPostBack) { ... }块内

于 2013-07-19T11:10:59.307 回答