我有一个应用程序,它为用户创建一系列报告并将其导出为PDF。使用绑定到Microsoft Access数据库的Crystal Reports创建报告(遗留原因,而不是我的选择)。我发现并不总是导出PDF数据。在某些情况下,假设我连续创建3个用户报告,PDF将包含来自所有3个用户的第一个用户的数据。 PDF文件。行为不一致,有时第二个用户将被正确导出,但第三个导出将包含第二个用户的数据。我很遗憾为什么会发生这种情况,但我最好的猜测是Crystal Report在导出为PDF之前没有完全刷新。这有意义吗?我应该使用RefreshReport事件并在那里导出吗?
唯一的另一个选择是数据库在导出时尚未更新,但是我已经在导出之前放了一些测试代码来检查数据库并且数据是正确的。有什么建议?以下是执行导出的代码:
crystalReport.Refresh();
foreach (Parameter parameter in reportParameters)
crystalReport.SetParameterValue(parameter.Name, parameter.Value);
ExportOptions crystalReportExportOptions;
DiskFileDestinationOptions crystalReportDiskFileDestinationOptions = new DiskFileDestinationOptions();
PdfRtfWordFormatOptions crystalReportFormatTypeOptions = new PdfRtfWordFormatOptions();
crystalReportDiskFileDestinationOptions.DiskFileName = pdfExportPath;
crystalReportExportOptions = crystalReport.ExportOptions;
{
crystalReportExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
crystalReportExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
crystalReportExportOptions.DestinationOptions = crystalReportDiskFileDestinationOptions;
crystalReportExportOptions.FormatOptions = crystalReportFormatTypeOptions;
}
crystalReport.Export();
最奇怪的是,如果我在crystalReport.Refresh()之后添加以下行,它可以工作:
System.Threading.Thread.Sleep(20000);
当然这是一个令人无法接受的黑客攻击,但正确的解决办法是什么?