2011-01-06 13 views
6

Mam datagridview z informacjami o konkurentach. Wyświetlam właściwości każdego kontrolera w PropertyGrid. Chcę, aby niektóre z tych właściwości (np. Degree, City, Institute) były skrzynkami referencyjnymi z wartościami pobranymi z bazy danych. W tym celu mogę utworzyć niestandardową TypeConvertor jak tenNiestandardowy TypeConverter ze zmienną wartością 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; } 
    } 

Ale chcę, aby ta valueList z bazy danych i mam 14 takich właściwości więc jakiś uniwersalny konwerter byłoby znacznie lepiej niż 14 konwerterów z tą tylko różnicą: valueList. Czy jest możliwe utworzenie TypeConvertera ze zmienną valueList (na przykład przekazaną do TypeConverter jako parametr w konstruktorze)? A może istnieje inny sposób, aby mieć w PropertyGrid dropbox z listą wartości zmiennych? Mam nadzieję, że było wystarczająco jasne Thnx z góry

Odpowiedz

5

W metodzie GetStandardValues ​​podano kontekst. Użyj context.Instance, aby uzyskać dostęp do obiektu, który przechowuje twoją własność. Następnie przesłuchaj go, aby uzyskać dostawcę usług, który zapewni Ci usługi DB. Może to być za pośrednictwem własnego API lub można uzyskać od IServiceProvider i realizacji GetService, lub dlaczego nie dostać go za pośrednictwem kontenera IOC jako singleton?

Powiązane problemy