我想坚持一种单一的形式和ReportViewer
控件,并在运行时分配各种报告和数据源。快速的Google检查显示了针对此问题的多样化和复杂的解决方案,这促使我宁愿在这里提问。我该如何实现?
最佳答案
您将需要一个具有ReportViewer控件,RDLC报告和数据源的表单;可能有几种方法可以实现此目的,但是您可以拥有一个“报告管理器”类,该类公开每个显示特定报告(例如ShowOrdersReport()
,ShowTimeSheetReport()
等)的方法-或者您可以定义基本的类具有ReportBase
方法实现,可在需要时提示输入参数...无论如何工作,本质上可以归结为:
var reportForm = new ReportViewerForm(); // instantiate the form
// load the report definition into the viewer:
reportForm.reportViewer1.LocalReport.ReportEmbeddedResource = "Namespace.Report.rdlc";
// loading the data works great with a DataSet:
var data = _reportingDataSet.Tables[0];
// create the ReportDataSource with the report data:
var reportDataSource = new ReportDataSource("rdsReportDataSource", data);
reportForm.ShowReport(new[] { reportDataSource });
在这里,您需要注入
Show()
依赖项;如果您使用的是参数化存储过程,则在填充数据集之前,需要提示输入报告参数。_reportingDataSet
方法将数据源添加到ShowReport()
,然后调用LocalReport.DataSources
,这将显示您指定的报告。public void ShowReport(IEnumerable<ReportDataSource> dataSources)
{
foreach (var dataSource in dataSources)
reportViewer1.LocalReport.DataSources.Add(dataSource);
reportViewer1.RefreshReport();
}
关于winforms - 如何将一个ReportViewer控件重用于带有EF数据源的许多报表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12584419/