Winforms 如何对带有EF数据源的多个报表重用一个ReportViewer控件?

Winforms 如何对带有EF数据源的多个报表重用一个ReportViewer控件?,winforms,reportviewer,rdlc,Winforms,Reportviewer,Rdlc,我希望只使用一个表单和ReportViewer控件,并在运行时分配各种报表和数据源。谷歌的快速检查揭示了这个问题的多样而复杂的解决方案,这促使我在这里发问。如何实现此目的?如果您使用的是Crystal report,请单击“加载报告”按钮使用此功能 CrystalReportViewer.ReportSource=ReportName 如果使用MS ReportViewer控件,则需要两个重要步骤来显示报告 将报告文件路径分配给ReportViewer 设置数据源 例如,名为reportView

我希望只使用一个表单和
ReportViewer
控件,并在运行时分配各种报表和数据源。谷歌的快速检查揭示了这个问题的多样而复杂的解决方案,这促使我在这里发问。如何实现此目的?

如果您使用的是Crystal report,请单击“加载报告”按钮使用此功能 CrystalReportViewer.ReportSource=ReportName

如果使用MS ReportViewer控件,则需要两个重要步骤来显示报告

  • 将报告文件路径分配给ReportViewer
  • 设置数据源
  • 例如,名为reportViewer1的ReportViewer控件需要显示SomeReport.rdlc文件,然后需要以下代码(比如单击按钮)

    这只是一个简单的示例,为了简单起见,我使用了静态报告,如果您需要显示来自数据库的数据,只需在调用RefreshReport之前分配datasource属性即可 e、 g

    如果MyreportDataSource是ReportDataSource类型的对象,则可以轻松地将任何ADO.net DataTable转换为ReportDataSource对象

    我希望这许多信息将为你做,如果你想看到更多的细节,你可以参考一个非常好的文章在这个位置


    您需要一个具有ReportViewer控件、RDLC报表和数据源的表单;实现这一点可能有几种方法,但您可以使用一个“报表管理器”类来公开每个方法都显示特定报表的方法(例如,
    ShowOrdersReport()
    ShowTimeSheetReport()
    ,等等)——或者您可以使用
    Show()定义一个基本的
    ReportBase
    在需要时提示输入参数的方法实现。。。不管怎样,基本上可以归结为:

    var reportForm=new reportviewperform();//实例化表单
    //将报告定义加载到查看器中:
    reportForm.reportViewer1.LocalReport.ReportEmbeddedResource=“Namespace.Report.rdlc”;
    //加载数据对数据集非常有效:
    var data=_reportingDataSet.Tables[0];
    //使用报表数据创建报表数据源:
    var reportDataSource=新的reportDataSource(“rdsReportDataSource”,数据);
    reportForm.ShowReport(新[]{reportDataSource});
    
    在这里,您需要注入
    \u reportingDataSet
    依赖项;如果使用的是参数化存储过程,则在填充数据集之前,需要提示输入报表参数

    ShowReport()
    方法将数据源添加到
    LocalReport.DataSources
    ,然后调用显示指定报告的
    RefreshReport()

    public void ShowReport(IEnumerable数据源)
    {
    foreach(数据源中的var数据源)
    reportViewer1.LocalReport.DataSources.Add(dataSource);
    reportViewer1.RefreshReport();
    }
    
    否,我正在使用MS`ReportViewer'控件和rdlc报告。如果rdlc报告具有参数,则需要传递它们:
    var imageFolder=new ReportParameter(“imageFolder”,“file://“+ConfigurationManager.AppSettings[“ReportImagesFolder”]);reportForm.reportViewer1.LocalReport.EnableExternalImages=true;reportForm.reportViewer1.LocalReport.SetParameters(新[]{imageFolder})
    
    this.reportViewer1.LocalReport.ReportPath = @"Add absolute path of rdlc file"//e.g. @"C:\SomeReport.rdlc" ;
    this.reportViewer1.RefreshReport();
    
    this.reportViewer1.LocalReport.DataSources.Add(MyreportDataSource);