C# Crystal报告错误“;无效的对象格式名称。”;对于场对象
我正在使用Crystal Reports和.NET C#制作动态报告。直到运行时,才完全了解报告的内容。 报表模板仅包含公式字段和与数据库表的连接。 在运行时,我收集所需的数据集合,创建一个新的reportDocument对象,并将集合设置为reports数据源。然后,我从报表模板收集所有字段对象,并循环它们,设置数据属性。只要属性的类型为string,这就可以正常工作,但当属性的类型为bool或double时,它会崩溃,并出现以下错误:“对象格式名称无效” 如何在运行时将字段对象的数据类型设置为numeric/bool 下面是一些代码:C# Crystal报告错误“;无效的对象格式名称。”;对于场对象,c#,asp.net,crystal-reports,C#,Asp.net,Crystal Reports,我正在使用Crystal Reports和.NET C#制作动态报告。直到运行时,才完全了解报告的内容。 报表模板仅包含公式字段和与数据库表的连接。 在运行时,我收集所需的数据集合,创建一个新的reportDocument对象,并将集合设置为reports数据源。然后,我从报表模板收集所有字段对象,并循环它们,设置数据属性。只要属性的类型为string,这就可以正常工作,但当属性的类型为bool或double时,它会崩溃,并出现以下错误:“对象格式名称无效” 如何在运行时将字段对象的数据类型设置
//Collecting data and setting data source
for (int i = 0; i < ColNumber; i++)
{
//Fields
var DbFieldName = mappingNames[i];
var fieldType = comparisonObj.GetFieldType(DbFieldName);
var fieldName = "Field" + (i + 1);
var ffld = report.DataDefinition.FormulaFields[fieldName];
if (ffld != null)
{
ffld.Text = "{" + aliasName + "." + DbFieldName + "}";
}
var fobj = report.ReportDefinition.ReportObjects[fieldName] as FieldObject;
if (fobj != null)
{
fobj.Left = CurrentLeft;
fobj.Width = FieldSpace * widths[i] / 100;
if (IsNumber(fieldType))
{
fobj.ObjectFormat.HorizontalAlignment = Alignment.RightAlign;
fobj.FieldFormat.NumericFormat.RoundingFormat = RoundingFormat.RoundToTen;
}
else if (IsBool(fieldType))
{
fobj.FieldFormat.BooleanFormat.OutputType = BooleanOutputType.YesOrNo;
}
}
//Headers
var ColumnHeaderName = headers[i];
var columnName = "Column" + (i + 1);
var tobj = report.ReportDefinition.ReportObjects[columnName] as TextObject;
if (tobj != null)
{
tobj.Text = ColumnHeaderName;
tobj.Left = CurrentLeft;
tobj.Width = FieldSpace * widths[i] / 100;
CurrentLeft = CurrentLeft + tobj.Width + blank;
if (IsNumber(fieldType))
tobj.ObjectFormat.HorizontalAlignment = Alignment.RightAlign;
}
}
//收集数据并设置数据源
for(int i=0;i
嗯,
因为没有人能帮我找到解决办法,我自己想出了一个。我使用toString方法将布尔值和数字转换成字符串。这不是最好的解决方案(在我看来),因为我想改变它本身的场对象的类型,但它可以工作
var DbFieldName = mappingNames[i];
var fieldType = comparisonObj.GetFieldType(DbFieldName);
var fieldName = "Field" + (i + 1);
var ffld = report.DataDefinition.FormulaFields[fieldName];
if (ffld != null)
{
if (IsNumber(fieldType))
ffld.Text = "ToText({" + aliasName + "." + DbFieldName + "}, 00, '')";
else if (IsDateTime(fieldType))
ffld.Text = "ToText({" + aliasName + "." + DbFieldName + "}, \"dd/MM/yyyy\")";
else if (IsBool(fieldType))
ffld.Text = "if{" + aliasName + "." + DbFieldName + "} then \"Y\" else \"N\"";
else
{
ffld.Text = "{" + aliasName + "." + DbFieldName + "}";
}
}