在Remote Report Viewer / ServerReport中请求单个报告页面

时间:2016-01-29 00:27:46

标签: 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 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

有没有办法只从远程报告服务器请求1个单页?

1 个答案:

答案 0 :(得分:0)

使用ReportExecution api,您将找到一个名为DeviceInfo的参数。这是一个xml配置结构,包含针对多个输出设备的额外信息。 HTML40的一个属性称为SectionDeviceInformation.Section属性允许您指定要返回的报表中的页面。这与ReportViewer控件有何关系,默认情况下报表查看器控件的内容以html格式返回,因此如果您可以使用render方法设置DeviceInfo结构,那么这将是一个可用选项。我能够找到与通过url设置设备信息有关的信息here。也许这有帮助。

实际上,我重新阅读了您的问题,似乎您要求您只能检索600页报告的第10页,这样所有600页都不会呈现,只有页面返回1/1而不是10 / ???那是对的吗?如果是这样,那么您必须在数据集或报表元素本身中放置页面过滤机制。默认行为是呈现足够的报告以获取分页指标。因此,有时您会看到第1/3页,有时页面1/600(在您选择最后一页之后)和其他时间页面1 / ???,可以在RenderInfo中呈现报告后获得该信息。如果您希望观看者认为只有一个页面,那么您将不得不欺骗它。如果你想要第10页/ ???我的第一个建议将有效用分页和所有回来。