在本地报告处理过程中发生错误.在第一次使用savefiledialog保存文件之后

本文关键字:第一次 savefiledialog 之后 保存文件 错误 报告 处理 过程中 | 更新日期: 2023-09-27 18:04:58

我有一个问题,我无法在谷歌搜索中找到。我试着自己解决,但还是不行。我必须渲染报告和出口到excel。问题是当我第一次保存文件时,它工作得很好。但是当我第二次保存文件时,它显示"本地报告处理期间发生错误"

我的代码

        public void createReportExcel(List<Models.MachineTime> item, List<Models.TestTime> testTime, List<Models.Interval> interval)
    {
        ReportViewer viewer = new ReportViewer(); 
        viewer.LocalReport.ReportPath = "../../Report/Scale.rdlc";
        string path = System.AppDomain.CurrentDomain.BaseDirectory;
        ReportDataSource reportDataSource1 = new ReportDataSource("DataSet1", item);
        viewer.LocalReport.DataSources.Add(reportDataSource1);
        ReportDataSource reportDataSource2 = new ReportDataSource("DataSet2", testTime);
        viewer.LocalReport.DataSources.Add(reportDataSource2);
        ReportDataSource reportDataSource3 = new ReportDataSource("DataSet3", interval);
        viewer.LocalReport.DataSources.Add(reportDataSource3);
        string reportType = null;
        string deviceInfo = null;
        reportType = "Excel";
        deviceInfo =
          "<DeviceInfo>" +
          "  <OutputFormat>Excel</OutputFormat>" +
          "  <PageWidth>11in</PageWidth>" +
          "  <PageHeight>8.5in</PageHeight>" +
          "  <MarginTop>0.5in</MarginTop>" +
          "  <MarginLeft>1in</MarginLeft>" +
          "  <MarginRight>1in</MarginRight>" +
          "  <MarginBottom>0.5in</MarginBottom>" +
          "</DeviceInfo>";
        string encoding;
        string fileNameExtension; 
        Warning[] warnings;
        string[] streams;
        byte[] renderedBytes= null;
        string mimeType; 
            renderedBytes = viewer.LocalReport.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings); 
        SaveFileDialog saveFile = new SaveFileDialog();
        saveFile.Filter = "Excel file (*.xls)|*.xls"; 
        if (saveFile.ShowDialog() == true)
        {
            string saveFileName = saveFile.FileName;
            using (FileStream fs = new FileStream(@saveFileName, FileMode.Create))
            {
                fs.Write(renderedBytes, 0, renderedBytes.Length);
                fs.Close();
                fs.Dispose();
                viewer.Dispose();
            } 
        } 
    }

正如我所解释的,它在我第一次保存时工作正常。当我再次尝试保存时,错误将出现在

行。
renderedBytes = viewer.LocalReport.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);

我注意到,当我成功保存后,一个对话框显示在第一次,第二次,错误总是发生。如果我第一次取消时,对话框显示,这是没有问题的第二次。

我也试图删除这行

        string saveFileName = saveFile.FileName;
            using (FileStream fs = new FileStream(@saveFileName, FileMode.Create))
            {
                fs.Write(renderedBytes, 0, renderedBytes.Length);
                fs.Close();
                fs.Dispose();
                viewer.Dispose();
            } 

问题仍未解决。

对不起,我的英语不好。我尽量解释清楚,所以它可能是模棱两可和错误的句子。谢谢你的帮助。

在本地报告处理过程中发生错误.在第一次使用savefiledialog保存文件之后

我找到了

我添加了这一行

saveFile.RestoreDirectory = true; 

它工作得很好!但我不知道为什么。