[英]Define SSRS report's DataSet and DataSource dynamically
我正在使用Visual Studio 2015和Entity Framework 6构建MVVM Light WPF应用程序。它需要使用WindowsFormsHost
控件在Reports.xaml
视图(用户控件)中运行一些SSRS 本地报告:
<WindowsFormsHost x:Name="WindowsFormsHost">
<rv:ReportViewer x:Name="ReportViewer" />
</WindowsFormsHost>
按照本MSDN文章中的说明,我创建了一个包含嵌入式数据源和数据集的报表。 但是,现在应用程序需要具有报表名称的ComboBox
,以便用户选择要在ReportViewer
控件中显示的ReportViewer
。
这是我想做的事情:
我已经尝试从RDLC文件中手动删除整个DataSources
和DataSets
标记,但是这会将其搞砸,并且Visual Studio会返回无效的XML错误。
是否可以在没有XML中嵌入数据集/数据源的情况下生成报告? 然后RDLC XML将提供布局,数据将来自代码隐藏?
这是我在MSDN文章中的Reports.xaml.cs
代码隐藏中尝试过的内容,但它使用了嵌入式数据集和数据源:
public MainWindow()
{
InitializeComponent();
Messenger.Default.Register<string>(this, "RunReport", RunReport);
}
private void RunReport(string reportName)
{
Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 =
new Microsoft.Reporting.WinForms.ReportDataSource();
AdventureWorks2008R2DataSet dataset = new AdventureWorks2008R2DataSet();
dataset.BeginInit();
//Name of the report dataset in our .RDLC file
reportDataSource1.Name = "DataSet1";
reportDataSource1.Value = dataset.SalesOrderDetail;
this._reportViewer.LocalReport.DataSources.Add(reportDataSource1);
this._reportViewer.LocalReport.ReportEmbeddedResource =
"<VSProjectName>.Report1.rdlc";
dataset.EndInit();
//fill data into adventureWorksDataSet
AdventureWorks2008R2DataSetTableAdapters.SalesOrderDetailTableAdapter salesOrderDetailTableAdapter =
new AdventureWorks2008R2DataSetTableAdapters.SalesOrderDetailTableAdapter();
salesOrderDetailTableAdapter.ClearBeforeFill = true;
salesOrderDetailTableAdapter.Fill(dataset.SalesOrderDetail);
_reportViewer.RefreshReport();
}
我认为更好的方法是让报告根据您传递的参数值决定要运行的存储过程。 让报告执行报告要执行的操作,获取并显示数据。 后面的代码处理要运行的报告以及何时运行。
你描述的方法闻起来像是一个让地狱报告复杂化的好方法。 为了您的利益,为了那些必须在您之后管理报告的人,请保持简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.