2011-01-06 4 views
6

Ich habe eine Datagridview mit Informationen über Konkurrenten. Ich zeige die Eigenschaften jedes Copmetitors in PropertyGrid an. Ich möchte, dass einige dieser Eigenschaften (z. B. Grad, Stadt, Institut) Dropboxen mit Werten aus der Datenbank sind. Zu diesem Zweck kann ich eine benutzerdefinierte TypeConvertor wie dieseCustom TypeConverter mit Variable 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; } 
    } 

erstellen Aber ich mag, dass valuelist von der Datenbank bekommen, und ich habe 14 solche Eigenschaften so einige Universalkonverter wären viel besser, als 14-Wandler mit dem einzigen Unterschied: Werteliste. Ist es möglich, einen TypeConverter mit der Variablen valueList zu erstellen (zB in TypeConverter als Parameter im Konstruktor übergeben)? Oder gibt es eine andere Möglichkeit, in PropertyGrid eine Dropbox mit einer Variablenwertliste zu haben? Hoffe, es war klar genug Thnx im Voraus

Antwort

5

In der GetStandardValues-Methode erhalten Sie einen Kontext. Verwenden Sie context.Instance, um auf das Objekt zuzugreifen, das Ihre Eigenschaft enthält. Fragen Sie danach, um einen Dienstanbieter zu erhalten, der Ihnen DB-Dienste anbietet. Es könnte durch Ihre eigene API sein oder Sie könnten von IServiceProvider ableiten und GetService implementieren, oder warum es nicht als Singleton durch Ihren IOC-Container bekommen?