我在使用 Crystal Reports(与 Visual Studio 2008 一起分发的版本)时遇到一些奇怪的行为。我可以正常查看报告,但尝试使用
ExportToDisk
失败,但出现以下异常:
CrystalDecisions.CrystalReports.Engine.InvalidArgumentException:
该组部分无法打印 因为它的条件字段是 不存在或无效。格式化 部分选择另一个条件 场地。文件错误 C:\DOCUME~1\gbuehler\LOCALS~1\Temp\Report {2FD9516D-0FD4-4D20-A326-D21EB762EB9E}.rpt: 组条件无效。 ---> System.Runtime.InteropServices.COMException (0x8000020B):
该组部分无法打印 因为它的条件字段是 不存在或无效。格式化 部分选择另一个条件 场地。文件错误 C:\DOCUME~1\developer\LOCALS~1\Temp\Report {2FD9516D-0FD4-4D20-A326-D21EB762EB9E}.rpt: 组条件无效。在 CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(ExportOptions pExportOptions、请求上下文 pRequestContext)在 CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) --- 内部结束 异常堆栈跟踪 --- at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(异常 吃 CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext 请求上下文)在 CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext 请求上下文)在 CrystalDecisions.CrystalReports.Engine.FormatEngine.Export(ExportRequestContext 请求上下文)在 CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToDisk(ExportFormatType 格式类型,字符串文件名)位于 LSPayroll.MainForm.btnSendCanadian_Click(对象 发送者、EventArgs e) 在 C:\Documents 中 和设置\开发人员\我的 文档\Visual Studio 2008\Projects\MyProject\MyProject\MainForm.cs:行 277
粗略搜索
Invalid Group Condition
会返回寻找解决方案和建议以重新创建报告的其他用户。有人能给出一个逻辑原因,为什么报告可以正常查看,但是ExportToDisk
失败并出现异常?
不确定它是否有帮助,但这是我用来创建报告文档和导出的代码:
// build a crystal reports document in memory and use the crystal
// reports library to export as a PDF
ReportDocument reportDocument = new ReportDocument();
reportDocument.Load(reportPath);
reportDocument.SetDataSource(data);
reportDocument.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, "payroll.pdf");
努力寻找解决这个问题的方法
对我有用的解决方案
在声明中
reportDocument.SetDataSource(data);
确保“数据”是对数据集而不是数据表的引用。
我正在使用 DataTable,它工作正常:
public ActionResult ReporteUsuarios() {
DataTable dt = new DataTable();
try {
SqlConnection con = (SqlConnection)seguridad.Database.Connection;
con.Open();
SqlCommand cmd = new SqlCommand("select nombre from usuarios", con);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);
con.Close();
} catch (Exception ex) {
throw new HttpException(500, "Hubo un problema con la base de datos. " + ex.StackTrace.ToString());
}
ReportClass rpt = new ReportClass();
rpt.FileName = Server.MapPath("/Reports/Usuarios.rpt");
rpt.Load();
rpt.SetDataSource(dt);
Stream stream = rpt.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
return File(stream, "application/pdf", "Usuarios.pdf");
}