调用ExportToDisk时Crystal Reports异常

时间:2011-06-29 16:13:55

标签: exception crystal-reports

我在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");

2 个答案:

答案 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");
    }