当我调用 ExportToDisk() 时。在某些机器上做得很好。但在某些机器上抛出异常。
异常
此字段名称未知。 文件 C:\Windows\TEMP\RPTH010_Report01 {C0D0E863-1741-4917-A455-B23347EA4FD6}.rpt 中的错误:公式 <填单日期> 中的错误。'numberVar RocDateNumber := {RPTH010_Report01.D01_APLDATE};' 此字段名称未知。
此字段名称未知。文件 C:\Windows\TEMP\RPTH010_Report01 {C0D0E863-1741-4917-A455-B23347EA4FD6}.rpt 中的错误:公式 <填单日期> 中的错误。'numberVar RocDateNumber := {RPTH010_Report01.D01_APLDATE};' 此字段名称未知。
堆栈跟踪
CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e) CrystalDecisions.ReportSource.EromReportSourceBase.ExportToStream(ExportRequestContext reqContext) CrystalDecisions.CrystalReports.Engine.FormatEngine.ExportToStream(ExportRequestContext reqContext) CrystalDecisions.CrystalReports.Engine.FormatEngine.Export(ExportRequestContext reqContext) CrystalDecisions。 CrystalReports.Engine.ReportDocument.ExportToDisk(ExportFormatType formatType, String fileName) JcsWebSolution.Report.CRDocument.SaveToDisk() mOffice.Models.Report.ASSET.RPTH010_Report01.PrintReport() mOffice.Models.Report.ReportBase.PrintProcess()
我的系统
- CrystalDecisions.CrystalReports.Engine.dll,v10.5.3700.0
- CrystalDecisions.Shared.dll,v10.5.3700.0
- 窗口服务器 2012 R2
- 视觉工作室 2013
我尝试通过以下方式修复错误
- 重新安装水晶报表运行时 SP12。
- 检查字体是否在系统中。
我尝试打印没有公式的报告,它可以很好地导出。我添加了它刚刚破坏的 concat 字符串公式。
我的代码
public class result
{
public string { get; set;}
}
public bool DoExport()
{
List<result> test = new List<result>();
test.Add(new result { test = "123" });
DataTable input = ListToDataTable(test);
input.TableName = "test";
m_RptDataSet.Tables.Add(input);
ReportDocument m_ReportDocument = new ReportDocument();
m_ReportDocument.Load(HttpContext.Current.Server.MapPath("~/RPT/test.rpt"));
m_ReportDocument.SetDataSource(input);
m_ReportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "test.pdf");
m_ReportDocument.Close();
m_ReportDocument.Dispose();
m_ReportDocument = null;
}
public DataTable ListToDataTable<T>(List<T> list)
{
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
DataTable dt = new DataTable();
object[] values;
for (int i = 0; i < props.Count; i++)
{
PropertyDescriptor prop = props[i];
dt.Columns.Add(prop.Name, prop.PropertyType);
}
foreach (T item in list)
{
values = new object[props.Count];
for (int i = 0; i < values.Length; i++)
{
values[i] = props[i].GetValue(item);
}
dt.Rows.Add(values);
}
return dt;
}
连接字符串公式
{RPTH040_Test.test} + "测试函数"
但在其他机器上就好了。有没有人有同样的问题?
更新
我测试了一份新报告,其中有 3 条没有公式的记录。我发现报告可以导出,但不显示记录。所以我想主要原因是 SetDataSource() 在我的机器上不起作用(windows 2012 R2)。我尝试将代码添加到 Web.config。
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
它仍然无法正常工作。有人知道吗?