使用 ReportViewer 控件呈现没有参数的 SSRS 报告失败
Rendering SSRS report, with no parameters, using ReportViewer control fails
我正在使用 ASP.Net 页面,该页面使用 ReportViewer 控件显示来自远程 SSRS 服务器的报告。在我们部署一个没有 require/accept 任何参数的新报告之前,它一直没有问题。呈现这些报表时,报表的第一页可以正常呈现,但是当您切换到另一页(使用 ReportViewer 中的控件)时,您会收到一条错误消息,显示 "One or more data sources is missing credentials".
这是 ReportViewer 的配置方式...
this.Report.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
this.Report.ServerReport.ReportServerUrl = new Uri(App.Config.ReportServerPath);
this.Report.ServerReport.ReportPath = this.ReportPath;
this.SetRerportParameterValues(); // This does nothing since the report doesn't have any parameters
this.Report.AsyncRendering = false;
如果我将 AsyncRendering 更改为 true,则在呈现报告的第一页时会显示错误。
在呈现没有任何参数的报表时,我必须对参数做一些不同的事情吗?
最好删除
this.SetRerportParameterValues();
因为这似乎什么都不做。
而且,您确定此 非常 报告中没有任何子报告吗?如果是,您可能需要检查其 query/data 来源等
编辑
有一些known issues with the reportviewer控件。
我个人在设计报表时仅将 reportviewer 作为基本查看器,因为从用户的角度来看,由于某些问题,reportViewer 不是最佳选择。
因此,为了让报告数据输出显示给用户,更好的选择是 convert report to PDF on the fly 从代码隐藏,并将 PDF 显示给用户。
我仍然不确定为什么会发生这种情况,但我确实找到了原因并能够解决它。
我的 ASPX 页面继承自自定义页面库(它继承了 System.Web.UI.Page)。基页的初始化循环遍历页面上的所有 HTML 控件,并将一个简单的处理程序附加到更改事件。当控件的值被修改时,事件处理程序会简单地将控件添加到列表中。这个事件处理程序非常简单,看起来像这样...
private void HtmlCtrl_ServerChange(object sender, EventArgs e)
{
HtmlControl ctrl = sender as HtmlControl;
if (ctrl != null)
{
this.changedControls.Add(ctrl);
}
}
出于某种原因,我仍然不确定为什么当您尝试使用零参数导航到报表的第二页时,此功能会弄乱 ReportViewer 控件。为了解决这个问题,我刚刚在我的基本页面 class 中添加了一个额外的 属性,这使我可以禁用更改跟踪功能,因为无论如何这个页面都不需要它。
我正在使用 ASP.Net 页面,该页面使用 ReportViewer 控件显示来自远程 SSRS 服务器的报告。在我们部署一个没有 require/accept 任何参数的新报告之前,它一直没有问题。呈现这些报表时,报表的第一页可以正常呈现,但是当您切换到另一页(使用 ReportViewer 中的控件)时,您会收到一条错误消息,显示 "One or more data sources is missing credentials".
这是 ReportViewer 的配置方式...
this.Report.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;
this.Report.ServerReport.ReportServerUrl = new Uri(App.Config.ReportServerPath);
this.Report.ServerReport.ReportPath = this.ReportPath;
this.SetRerportParameterValues(); // This does nothing since the report doesn't have any parameters
this.Report.AsyncRendering = false;
如果我将 AsyncRendering 更改为 true,则在呈现报告的第一页时会显示错误。
在呈现没有任何参数的报表时,我必须对参数做一些不同的事情吗?
最好删除
this.SetRerportParameterValues();
因为这似乎什么都不做。
而且,您确定此 非常 报告中没有任何子报告吗?如果是,您可能需要检查其 query/data 来源等
编辑
有一些known issues with the reportviewer控件。
我个人在设计报表时仅将 reportviewer 作为基本查看器,因为从用户的角度来看,由于某些问题,reportViewer 不是最佳选择。
因此,为了让报告数据输出显示给用户,更好的选择是 convert report to PDF on the fly 从代码隐藏,并将 PDF 显示给用户。
我仍然不确定为什么会发生这种情况,但我确实找到了原因并能够解决它。
我的 ASPX 页面继承自自定义页面库(它继承了 System.Web.UI.Page)。基页的初始化循环遍历页面上的所有 HTML 控件,并将一个简单的处理程序附加到更改事件。当控件的值被修改时,事件处理程序会简单地将控件添加到列表中。这个事件处理程序非常简单,看起来像这样...
private void HtmlCtrl_ServerChange(object sender, EventArgs e)
{
HtmlControl ctrl = sender as HtmlControl;
if (ctrl != null)
{
this.changedControls.Add(ctrl);
}
}
出于某种原因,我仍然不确定为什么当您尝试使用零参数导航到报表的第二页时,此功能会弄乱 ReportViewer 控件。为了解决这个问题,我刚刚在我的基本页面 class 中添加了一个额外的 属性,这使我可以禁用更改跟踪功能,因为无论如何这个页面都不需要它。