2009-12-17 5 views
2

Я пытаюсь связать IList объектов с DataSource GridView, и одно из свойств объекта - это перечисление. Я пытался использовать TypeConverter в перечислении, чтобы использовать описание, когда объект привязан к GridView Row. Это не похоже на мой метод EnumConverter.ConvertTo. Будет ли TypeConverter вызываться автоматически, когда объект привязан к ASP.NET GridView?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 
    } 

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

Успешное должно быть успешным - по крайней мере, в Великобритании ;-) – paul

+0

Да, мне нужно работать над моей орфографией ... :) – CSharpAtl

ответ

0

Я не думаю, что GridView надоедает об атрибуте TypeConverter при связывании по 2 причинам:

  1. Это снизит производительность i n больших наборов данных.
  2. Было бы данные несогласованную относительно сортировки и группировок (источник данных говорят, что данные были доставлены отсортированы, но does'nt кажется отсортированы из преобразователя)

PS: Этот конвертер вы упомянули would'nt работать либо в любом месте , Вы должны реализовать метод «CanConvertTo».

PS2: Хороший подход для выполнения того, что вы хотите, - это реализовать пользовательский шаблон ячейки.

+0

Я использовал этот подход при привязке к combobox, и в настоящее время я использую поле шаблона и сделать мое форматирование внутри ItemTemplate. Я могу сделать это в ItemTemplate, поэтому не уверен, что ваш аргумент №1 является точным, потому что я делаю то же самое по существу. – CSharpAtl

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); 

    } 
} 

Вы, вероятно, следует соблюдать параметры кодирования, и сделать любое форматирование, которое было указано .. и, вероятно, лучше всего реализовать CanConvertTo для вашего конвертера.

Смежные вопросы