0
我正在使用Crystal Reports和.NET C#進行動態報告。直到運行時才能完全知道報告的內容。 報告模板只包含公式字段和到數據庫表的連接。 在運行時我收集想要的數據集合,創建一個新的reportDocument對象並將集合設置爲報表DataSource。然後我收集報告模板中的所有字段對象,並循環遍歷它們,設置數據屬性。這隻要屬性爲字符串類型的工作得很好,但是當它被bool類型或雙的,它與下面的錯誤崩潰:「無效的對象格式名稱」Crystal Reports錯誤「無效的對象格式名稱」。用於字段對象
如何設置的數據類型運行時將字段對象轉換爲numeric/bool?
下面是一些代碼:
//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;
}
}