具有可变StandardValues的自定义TypeConverter

时间:2011-01-06 14:45:44

标签: c# .net propertygrid typeconverter

我有一个datagridview,其中包含有关竞争对手的信息。我在PropertyGrid中显示每个copmetitor的属性。我希望其中一些属性(例如Degree,City,Institute)是带有从数据库中获取的值的dropbox。为此,我可以创建一个像这样的自定义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; }
  }

但是我想从数据库中获取valueList并且我有14个这样的属性,所以一些通用转换器将比14个转换器好得多,唯一不同的是:valueList。是否可以使用变量valueList创建TypeConverter(例如,在构造函数中作为参数传递给TypeConverter)?或者也许还有另一种方法可以在PropertyGrid中拥有一个带有变量值列表的Dropbox? 希望它足够清楚 Thnx提前

1 个答案:

答案 0 :(得分:6)

在GetStandardValues方法中,您将获得一个上下文。使用context.Instance访问包含您的媒体资源的对象。然后询问它以获得将为您提供数据库服务的服务提供商。它可以通过您自己的API,也可以从IServiceProvider派生并实现GetService,或者为什么不通过IOC容器作为单例获取它?