2011-01-06 24 views
6

Tengo una vista de cuadro de datos con información sobre la competencia. Muestro las propiedades de cada copmetitor en PropertyGrid. Quiero que algunas de esas propiedades (por ejemplo, Degree, City, Institute) sean buzones con valores tomados de la base de datos. Para este fin puedo crear un TypeConvertor encargo como ésteCustom TypeConverter with 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; } 
    } 

pero quiero conseguir ese valueList de base de datos y tengo 14 tales propiedades por lo que algunos convertidor universal sería mucho mejor que 14 convertidores con la única diferencia: valueList. ¿Es posible crear un TypeConverter con la variable valueList (por ejemplo, pasar a TypeConverter como parámetro en el constructor)? ¿O tal vez hay otra forma de tener en PropertyGrid un dropbox con una lista de valores variables? Espero que haya sido lo suficientemente claro Thnx de antemano

Respuesta

5

En el método GetStandardValues, se le proporciona un contexto. Use context.Instance para acceder al objeto que contiene su propiedad. Luego, inténtelo para obtener un proveedor de servicios que le proporcione servicios DB. Podría ser a través de su propia API o podría derivar de IServiceProvider e implementar GetService, o ¿por qué no obtenerlo a través de su contenedor IOC como singleton?