2009-12-17 86 views
2

我想绑定一个对象的IList到一个GridView的DataSource,并且该对象的其中一个属性是一个枚举。当对象绑定到GridView行时,我试图在枚举上使用TypeConverter来使用Description。它看起来不像我的EnumConverter.ConvertTo方法被调用。当对象绑定到ASP.NET GridView时,会自动调用TypeConverter吗?TypeConverter绑定到ASP.NET GridView

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); 
     } 
    } 
+0

成功应该是成功的 - 至少在英国;-) – paul 2009-12-25 14:15:15

+0

是的....需要工作我的拼写... :) – CSharpAtl 2009-12-28 02:33:24

回答

0

我不认为有两个原因结合时的GridView困扰有关的TypeConverter属性:

  1. 这会降低我的表现n个大数据集。
  2. 它将使有关排序和分组不一致的数据(数据源说,数据被送到分拣但它一点儿也不显得因为转换器的排序)

PS:你提到的这个转换器would'nt工作,要么在任何地方。您必须实施“CanConvertTo”方法。

PS2:做你想做的事情的一个好方法是实现一个自定义单元格模板。

+0

我已经使用这种方法时绑定到一个组合框,我目前正在使用一个模板字段,并在ItemTemplate中进行格式化。我能够在ItemTemplate中做到这一点,所以不确定你的理由#1是否准确,因为我正在做同样的事情。 – CSharpAtl 2009-12-18 14:05:08

2

不,GridView似乎只是为了ToString。

我已经做虽然是子类绑定列(或的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。