2009-12-17 83 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。