使用Microsoft.Reporting.WinForms动态加载嵌入资源报告

13

如何从嵌入的资源动态加载新报告?我创建了一个包含报告作为嵌入资源的报告项目。我添加了第二个报告文件并使用以下代码切换报告:

this.reportViewer1.LocalReport.ReportEmbeddedResource = "ReportsApplication2.Report2.rdlc";
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();
当此代码执行时,原始报告仍然可在报告查看器中显示。
我还尝试使用。
LocalReport.LoadReportDefinition

但是结果相同。


当我在我的电脑上尝试该应用程序时,它可以正常工作,但是在另一台电脑上该应用程序无法运行。 - reguieg younes
2个回答

9
答案是:你需要调用

<ReportViewer>.Reset();

在更改ReportEmbeddedResource的值或调用LoadReportDefinition之前,需要注意以下事项。

完成以上操作后,您还需要调用

<ReportViewer>.LocalReport.DataSources.Add( ... );

重新建立数据源。


只是想添加一条评论,说除非你也执行这个“Reset”,否则可能会遇到参数未定义的错误。 - test

0

更好的引用报表的方式是使用ReportEmbeddedResource的默认值,不要硬编码,只需更改报表的名称。

//choose which report to load
        string reportEmbeddedResource = this.orderReportViewer.LocalReport.ReportEmbeddedResource;
        //remove the extention .rdlc
        reportEmbeddedResource = reportEmbeddedResource.Remove(reportEmbeddedResource.LastIndexOf('.'));
        //remove name of current report ex: .invoice.rdlc
        reportEmbeddedResource = reportEmbeddedResource.Remove(reportEmbeddedResource.LastIndexOf('.'));
        //clear current reportEmbeddedResource
        this.orderReportViewer.Reset();
        if (_retailReceip)
        {
            this.orderReportViewer.LocalReport.ReportEmbeddedResource = reportEmbeddedResource + ".PrintReceipt.rdlc";
        }
        else
        {
            this.orderReportViewer.LocalReport.ReportEmbeddedResource = reportEmbeddedResource +  ".PrintOrder.rdlc";
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接