即使没有子报表中的参数,SubreportProcessingEventHandler也不会触发

时间:2016-01-04 18:36:03

标签: rdlc reportviewer subreport

我正在尝试在主报表中使用子报表组件,但即使子报表中没有任何可能产生错误的参数,也不会触发事件SubreportProcessingEventHandler

 public ActionResult MyReport(DateTime dateReport)
    {
        var root = Path.GetDirectoryName(this.Server.MapPath("~"));

        if (string.IsNullOrEmpty(root))
        {
            return this.HttpNotFound();
        }

        var path = Path.Combine(root, "bin\\Reports\\MainReport.rdlc");


        if (System.IO.File.Exists(path))
        {
            this.reportViewer.LocalReport.ReportPath = path;                     
        }
        else
        {
            return this.View("Index");
        }

        this.LoadData(dateReport);

        var reportType = "PDF";
        string mimeType;
        string encoding;
        string fileNameExtension;

        var deviceInfo = "<DeviceInfo>" + "  <OutputFormat>" + reportType + "</OutputFormat>"
                         + "  <PageWidth>8.5in</PageWidth>" + "  <PageHeight>11in</PageHeight>"
                         + "  <MarginTop>0.2in</MarginTop>" + "  <MarginLeft>0.4in</MarginLeft>"
                         + "  <MarginRight>0.4in</MarginRight>" + "  <MarginBottom>0.1in</MarginBottom>"
                         + "</DeviceInfo>";

        Warning[] warnings;
        string[] streams;

        var renderedBytes = this.reportViewer.LocalReport.Render(
            reportType,
            deviceInfo,
            out mimeType,
            out encoding,
            out fileNameExtension,
            out streams,
            out warnings);

        return this.File(renderedBytes, mimeType);
    }


  private void LoadData(DateTime dateReport)
    {
        ........

        this.reportViewer.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(this.MySubreportEventHandler);

        this.reportViewer.LocalReport.DataSources.Add(new ReportDataSource("UserDataSet", users.DistinctBy(u => u.UserName)));
        this.reportViewer.LocalReport.DataSources.Add(new ReportDataSource("EluateReportDataSet", radiopharmacyEluateReports));
        this.reportViewer.LocalReport.DataSources.Add(new ReportDataSource("MarkingProtocolReportDataSet", radiopharmacyMarkingProtocolReports));

        this.reportViewer.LocalReport.Refresh();

    }

public void MySubreportEventHandler(object sender, SubreportProcessingEventArgs e)
    {
       .....
        e.DataSources.Add(new ReportDataSource("RadiopharmaceuticalQualityControlDataSet", radiopharmacyReportQualityControls));
    }

我检查了输出并引发了此警告:

Warning: Warnings occurred while executing the subreport ‘Subreport1’. (rsWarningExecutingSubreport)

1 个答案:

答案 0 :(得分:0)

经过更详细的观察,我注意到子报表确实需要一个与主报表传递的参数匹配的参数。没有任何参数,子报告就不起作用。