我有一个名为SpecialGridView的类,它继承自GridView
。
另一方面,我有报告页面使用此SpecialGridView来显示数据。
属性autogeneratedcolumns设置为true,我想保留此选项。
为了放置数据格式,我重写了“CreateAutoGeneratedColumn”来解析数据是否为“Decimal”时是否会建立此类数据的格式。但我得到一个例外“NotSupportedException”
关于如何解决它的任何想法? 提前谢谢。
这里是我写的代码:
protected override AutoGeneratedField CreateAutoGeneratedColumn(AutoGeneratedFieldProperties fieldProperties)
{
AutoGeneratedField field = new AutoGeneratedField(fieldProperties.DataField);
field.HtmlEncode = false;
string name = fieldProperties.Name;
((IStateManager)field).TrackViewState();
field.HeaderText = name;
field.SortExpression = name;
field.ReadOnly = fieldProperties.IsReadOnly;
field.DataType = fieldProperties.Type;
if (field.DataType == typeof(Decimal))
{
field.DataFormatString= "{0:0.00}";
}
return field;
}
问候。
Josema
答案 0 :(得分:0)
这是一个解决方案(带反射):
protected override AutoGeneratedField CreateAutoGeneratedColumn(AutoGeneratedFieldProperties fieldProperties)
{
AutoGeneratedField field = new AutoGeneratedField(fieldProperties.DataField);
StateBag sb = (StateBag)field.GetType().InvokeMember("ViewState",BindingFlags.GetProperty|BindingFlags.NonPublic|BindingFlags.Instance,null,field, new object[] {});
field.HtmlEncode = false;
string name = fieldProperties.Name;
((IStateManager)field).TrackViewState();
field.SortExpression = name;
field.ReadOnly = fieldProperties.IsReadOnly;
field.DataType = fieldProperties.Type;
if (field.DataType == typeof(Decimal))
{
sb["DataFormatString"]= "{0:c}";
}
if (field.DataType == typeof(DateTime))
{
sb["DataFormatString"] = "{0:d}";
}
return field;
}