0

我的问题是我需要带有可变查询和可变内容/列/等的临时报告。为每个用户定制和保存,我还没有解决方案。

我有一个带有 SQL Server 数据库的 MVC 4 C# 应用程序,并且我有可用的 SSRS。

我正在查看使用 Visual Studio 报告查看器显示报告。

是将 reportViewer 放入 Web 表单页面上的 MVC 应用程序的简单示例。

报表查看器可以通过更改reportViewer的源数据集、ReportPath和ReportServerURL来显示不同的报表

在代码中,我看到这样的示例,其中我可以覆盖 RDLC 文件的数据集和路径,但我想做的只是将动态生成的数据集和 RDLC 文件传递​​给查看器。这将使我能够灵活地在数据库中构建和保存用户的报告模板,然后只需调用它并运行报告。

这是可能的,还是我叫错了树?

4

2 回答 2

0

我在这里从臀部拍摄,可能有更好的解决方案,但本质上 ssrs 报告是一个 XML 文件,

我怀疑您可以根据您的标准动态生成此 XML(很多痛苦),将文件另存为 temp.rdl 或 rdlc 文件(我忘记了哪个是哪个),然后从您的 reportviewer 控件中调用它

或者

如果您的用户负责构建报告,那么只需读取报告生成器生成的文件并将其保存到数据库中,就不会存在痛苦。

或者

如果你喜欢使用报表服务器,你可以与 SSRSReportService Web 服务交互,有很多选项可以上传报表、分配权限等,希望你能看到我的目标。

希望其中一个选项可以帮助您:)

于 2013-11-20T03:22:02.100 回答
0

我实际上是在我从事的一个项目中做到这一点的。我即时生成 xml 并将其加载到内存流中,然后将其加载到查看器中。我还创建数据集并同时加载它们。在 stackoverflow 上有一个 dynamic-rdlc-generation 标签,它也可能有一些有趣的问题/答案需要查看。

//GenerateRdl returns memory stream of dynamically constructed xml
MemoryStream report = GenerateRdl(rep.fields, selected);
//rvMain is my report viewer on the page            
rvMain.LocalReport.LoadReportDefinition(report);

//this is the main dataset for the report.  I don't do any subreports
//for the reports I generate
ReportDataSource reportData = new
  ReportDataSource("ReportData", ds.Tables[0]);

//I use this for the company logo I'm placing at the top of each report
ReportDataSource logo = new ReportDataSource("LogoDS", GetLogoDataSet().Tables[0]);

rvMain.LocalReport.DataSources.Clear();

rvMain.LocalReport.DataSources.Add(reportData);
rvMain.LocalReport.DataSources.Add(logo);
rvMain.LocalReport.Refresh();
于 2013-11-25T21:02:24.190 回答