我想坚持一种单一的形式和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/

10-12 22:32
查看更多