C# 在远程报表查看器/ServerReport中请求单个报表页面

C# 在远程报表查看器/ServerReport中请求单个报表页面,c#,reporting-services,ssrs-2008,reportviewer,C#,Reporting Services,Ssrs 2008,Reportviewer,我试图从远程报告中仅获取一页,但却从远程报告服务器获取了整个多页报告: var rsReports = new Microsoft.Reporting.WebForms.ReportViewer { ProcessingMode = ProcessingMode.Remote, ShowParameterPrompts = false, CurrentPage = page // In theory this should be enough, but makes abs

我试图从远程报告中仅获取一页,但却从远程报告服务器获取了整个多页报告:

var rsReports = new Microsoft.Reporting.WebForms.ReportViewer
{
    ProcessingMode = ProcessingMode.Remote,
    ShowParameterPrompts = false,
    CurrentPage = page // In theory this should be enough, but makes absolutely no difference
}
rsReports.ServerReport.ReportServerCredentials = new ReportServerCredentials(username, password, domain);
rsReports.ServerReport.ReportServerUrl = remoteServerUrl;
rsReports.ServerReport.ReportPath = reportPath;
rsReports.ServerReport.SetParameters(parameters);
rsReports.ServerReport.Refresh();

return rsReports.ServerReport.Render("HTML4.0"); // Returns a byte[] of html containing all report pages

有没有办法只从远程报表服务器请求一个页面?

使用ReportExecution api,您将找到一个名为DeviceInfo的参数。这是一个xml配置结构,包含多个目标输出设备的额外信息。HTML40的一个属性被调用。
DeviceInformation.Section
属性允许您在报告中指定要返回的页面。这与ReportViewer控件有何关系?默认情况下,ReportViewer控件的内容是以html格式返回的,因此,如果可以使用渲染方法设置
DeviceInfo
结构,则这将是一个可用的选项。我能够通过url找到有关设置设备信息的信息。也许这有帮助


事实上,我重新阅读了您的问题,您似乎在问,您是否可以只检索600页报告中的第10页,而不呈现所有600页,只返回第1/1页而不是10/???对吗?如果是这样,那么您必须在数据集或报表元素本身中设置页面过滤机制。默认行为是呈现足够的报告以获取分页度量。因此,有时您会看到第1/3页,有时会看到第1/600页(在您选择最后一页后),有时会看到第1/600页,而其他时间则会看到第1页/???,在
RenderInfo
中呈现报告后,可以获得这些信息。如果你想让浏览者认为只有一页,那么你必须欺骗它。如果您想要第10页/?,我的第一个建议就行了???返回页面和所有页面。

理想情况下,我不希望从服务器获取所有600页。事实上,我不希望服务器通过查询数据库来获取填充600页的记录。假设我没有权限修改报告并使用报告服务器上的内容。我想一定有办法做到这一点,因为当我在报表服务器上直接查询我的报表时,它似乎会分别查询每个页面的数据库,而不是下载整个内容。如果强制它到最后一个页面>>,那么它将迭代所有页面。也就是说,如果您需要300页中的第60页,那么将迭代60页。这就是为什么建议在细节数据开始和结束时使用take和skip参数之类的过滤器。