2011-01-06 1 views
6

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

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

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

ответ

5

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