我在Crystal Reports(随Visual Studio 2008发布的版本)中遇到了一些奇怪的行为。我可以正常查看报告,但尝试使用ExportToDisk
失败时出现以下异常:
CrystalDecisions.CrystalReports.Engine.InvalidArgumentException:
此组部分无法打印 因为它的条件字段是 不存在或无效。格式化 部分选择另一个条件 领域。文件错误 C:\ DOCUME〜1 \ gbuehler \ LOCALS〜1个\ TEMP \报告 {2FD9516D-0FD4-4D20-A326-D21EB762EB9E} .RPT: 无效的组条件。 ---> System.Runtime.InteropServices.COMException (0x8000020B):
此组部分无法打印 因为它的条件字段是 不存在或无效。格式化 部分选择另一个条件 领域。文件错误 C:\ DOCUME〜1个\开发\ LOCALS〜1个\ TEMP \报告 {2FD9516D-0FD4-4D20-A326-D21EB762EB9E} .RPT: 无效的组条件。在 CrystalDecisions.ReportAppServer.Controllers.ReportSourceClass.Export(ExportOptions pExportOptions,RequestContext pRequestContext)at CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext)---内心的结束 异常堆栈跟踪--- at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(例外 吃 CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext)at CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext)at CrystalDecisions.CrystalReports.Engine.FormatEngine.Export(ExportRequestContext reqContext)at CrystalDecisions.CrystalReports.Engine.ReportDocument.ExportToDisk(ExportFormatType formatType,String fileName)at LSPayroll.MainForm.btnSendCanadian_Click(对象 发件人,EventArgs e)在C:\ Documents中 和Settings \ developer \ My Documents \ Visual Studio 2008 \项目\ 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");
答案 0 :(得分:1)
挣扎着找到解决这个问题的方法
适合我的解决方案
声明
reportDocument.SetDataSource(data);
确保'data'是对DataSet的引用,而不是DataTable。
答案 1 :(得分:0)
我正在使用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");
}