我试图将对象的 IList 绑定到 GridView 的数据源,并且该对象的属性之一是枚举。当对象绑定到 GridView 行时,我试图在枚举上使用 TypeConverter 来使用说明。它看起来不像我的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
}
类型转换器类:
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);
}
}
不,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);
}
}
您可能应该尊重编码参数,并执行指定的任何格式...并且最好也为您的转换器实现 CanConvertTo 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)