我在2012年的asp.net Web表单应用程序中使用asp.net报表查看器控件来处理2012年SQL Server报表服务报表,这些报表是远程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事件处理程序中这样做确实有效。非常感谢任何帮助。
答案 0 :(得分:0)
我相信你用SetParameters覆盖了参数集合,基本上消除了其他参数。您需要存储当前参数并同时设置所有参数。
答案 1 :(得分:0)
您应该将这些陈述放在if (!Page.IsPostBack) { ... }
块