如何使用 C# 停止在报表查看器中打印错误页

本文关键字:打印 错误 报表 何使用 | 更新日期: 2023-09-27 18:31:17

我有一个主报告文件和一个子报告文件。

主报表文件

调用子报表文件。

让我们先看一下代码。

    private void CreatePDF(string fileName)
    {
        try
        {
            // Variables
            Warning[] warnings;
            string[] streamIds;
            string mimeType = string.Empty;
            string encoding = string.Empty;
            string extension = string.Empty;
            string _strGijunMonth = DateTime.Parse(GijunMonth).ToString("yyyyMM");
            byte[] bytes = null;
            // Setup the report viewer object and get the array of bytes
            ReportViewer viewer = new ReportViewer();
            viewer.LocalReport.DataSources.Clear();
            viewer.ProcessingMode = ProcessingMode.Local;
            viewer.LocalReport.ReportEmbeddedResource = "MasterReport.rdlc";
            viewer.LocalReport.EnableExternalImages = true;
            DataTable _dt = base.GetDataTable(
               "my_procedure"
               , _strMainNo
               );
            _intTotalPage = _dt.Rows.Count * 2;
            ReportDataSource _ds = new ReportDataSource();
            _ds.Value = _dt;
            _ds.Name = "SetData";
            viewer.LocalReport.DataSources.Add(_ds);
            // sub report event
            viewer.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing);
            // print
            viewer.RefreshReport();
            bytes = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);
            System.IO.FileStream newFile1 = new System.IO.FileStream(fileName, System.IO.FileMode.Create);
            newFile1.Write(bytes, 0, bytes.Length);
            newFile1.Close();
        }
        catch
        {
            throw;
        }
    }
    void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
    {
        try
        {
            string MAINT_NO = e.Parameters["MAINT_NO"].Values[0];
            string _strGijunMonth = DateTime.Parse(GijunMonth).ToString("yyyyMM");
            // get sub report procedure
            DataSet _dsCust_Info = base.GetDataSet(
                "my_sub_procedure"
                , MAINT_NO
                , _strGijunMonth
                );
            ----> by somehow, it should throw error. If so, I should not print error page to pdf.
        }
        catch (Exception err)
        {
        }
    }

我的应用程序使用文件名参数调用"CreatePDF"方法。

假设我必须打印到 PDF 5 页。

调用LocalReport_SubreportProcessing事件时,某些子报表在数据中具有错误值。因此,我在事件中抛出LocalReport_SubreportProcessing错误。

例如,当我说有 5 页,只有 1、2、3 和 5 页是可以的,数字 4 页不应该打印为 PDF。

我想知道如何删除已经由ReportViewer创建的PDF页面。如您所见,LocalReport_SubreportProcessing事件是在创建PDF文件之后发生的。

有人知道解决这个问题吗?

如何使用 C# 停止在报表查看器中打印错误页

也许 reportViewer.CancelRendering(0);当您检测到错误时?