【问题标题】:Dynamically Load Embedded Resource Report Using Microsoft.Reporting.WinForms使用 Microsoft.Reporting.WinForms 动态加载嵌入式资源报表
【发布时间】:2008-10-02 15:24:41
【问题描述】:

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

this.reportViewer1.LocalReport.ReportEmbeddedResource = "ReportsApplication2.Report2.rdlc";
this.reportViewer1.LocalReport.Refresh();
this.reportViewer1.RefreshReport();

执行此代码时,原始报表在报表查看器中仍然可见。

我也试过

LocalReport.LoadReportDefinition

但结果相同。

【问题讨论】:

  • 当我在我的电脑上试用该应用程序时,它可以工作,但该应用程序不能在另一台电脑上工作

标签: c# reporting-services report


【解决方案1】:

答案:你必须打电话

<ReportViewer>.Reset();

在更改 ReportEmbeddedResource 的值或调用 LoadReportDefinition 之前。

在你这样做之后,你还必须调用

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

重新建立数据源。

【讨论】:

  • 只想添加一条评论,说明您可能会遇到未定义参数的错误,除非您也这样做Reset。
【解决方案2】:

引用报告的更好方法是使用 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";
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-15
    • 2013-05-19
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多