我正在尝试将对象的IList绑定到GridView的DataSource,并且该对象的一个属性是枚举。当对象绑定到GridView行时,我试图在枚举上使用TypeConverter来使用Description。看起来我的EnumConverter.ConvertTo
方法看起来不像。将对象绑定到ASP.NET GridView时会自动调用TypeConverter吗?
ENUM:
[TypeConverter(typeof(AuditReasonConverter))]
public enum AuditReason
{
[System.ComponentModel.Description("Successful Login")]
SuccessfulLogin,
[System.ComponentModel.Description("Failed Login")]
FailedLogin,
[System.ComponentModel.Description("New User")]
NewUser,
[System.ComponentModel.Description("Edited User")]
EditedUser
}
TypeConverter类:
public class AuditReasonConverter : EnumConverter
{
public AuditReasonConverter()
: base(
typeof(Blah.Core.AuditItem.AuditReason))
{ }
public override object ConvertTo(ITypeDescriptorContext context,
System.Globalization.CultureInfo culture, object value,
System.Type destinationType)
{
if (destinationType == typeof(string))
{
return Utilities.GetEnumerationDescription(typeof(Blah.Core.AuditItem.AuditReason), value); // your code here
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
答案 0 :(得分:2)
不,GridView似乎只是去ToString。
我所做的是子类BoundField(或DataControlField =更多工作)并在FormatDataValue中使用您的转换器 -
public class ConverterBoundField : BoundField
{
protected override string FormatDataValue(object dataValue, bool encode)
{
TypeConverter converter = TypeDescriptor.GetConverter(dataValue.GetType());
if (converter.CanConvertTo(typeof(string)))
{
return converter.ConvertToString(dataValue);
}
return base.FormatDataValue(dataValue, encode);
}
}
您应该尊重encode参数,并执行指定的任何格式化......并且最好也为您的转换器实现CanConvertTo。
答案 1 :(得分:0)
我不认为GridView在绑定时会遇到TypeConverter属性,原因有两个:
PS2:实现自己想做的事情的一个好方法是实现自定义单元格模板。