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控件、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);