Пользовательский TypeConverter с переменной StandardValues

У меня есть datagridview с информацией о конкурентах. Я отображаю свойства каждого конкурента в PropertyGrid. Я хочу, чтобы некоторые из этих свойств (например, степень, город, институт) были выпадающими ящиками со значениями, взятыми из базы данных. Для этой цели я могу создать собственный TypeConvertor, подобный этому.

class DegreeTypeConverter : StringConverter
{
  static string[] _valueList = { "Bachelor", "Master", "Student" }; 

  public override bool GetStandardValuesSupported(
     ITypeDescriptorContext context)
  {
     return true;
  }

  public override bool GetStandardValuesExclusive(
     ITypeDescriptorContext context)
  {
     return true;
  }


  public override StandardValuesCollection GetStandardValues(
     ITypeDescriptorContext context)
  {
     return new StandardValuesCollection(_valueList);
  }
}

[TypeConverter(typeof(DegreeTypeConverter))]
  public string Degree
  {
     get { return _degree; }
     set { _degree = value; }
  }

Но я хочу получить этот список значений из базы данных, и у меня есть 14 таких свойств, поэтому какой-нибудь универсальный преобразователь будет намного лучше, чем 14 преобразователей, с той лишь разницей: значениеСписок. Можно ли создать TypeConverter с переменным valueList (например, переданным в TypeConverter как параметр в конструкторе)? Или, может быть, есть другой способ иметь в PropertyGrid раскрывающийся список со списком значений переменных? Надеюсь, это было достаточно ясно Thnx заранее


person Sasha Grinevich    schedule 06.01.2011    source источник


Ответы (1)


В методе GetStandardValues ​​вам предоставляется контекст. Используйте context.Instance для доступа к объекту, который владеет вашей собственностью. Затем опросите его, чтобы получить поставщика услуг, который предоставит вам услуги БД. Это может быть ваш собственный API или вы можете получить его от IServiceProvider. и внедрить GetService, или почему бы не получить его через контейнер IOC как синглтон?

person Nicolas Cadilhac    schedule 06.01.2011