我有一个关于竞争对手信息的datagridview。我在PropertyGrid中显示每个copmetitor的属性。我希望其中一些属性(例如,学位,城市,学院)成为具有从数据库中获取的值的保管箱。为此,我可以创建一个像这样的自定义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中具有一个带有可变值列表的保管箱?
希望足够清楚
提前Thnx

最佳答案

在GetStandardValues方法中,将为您提供上下文。使用context.Instance访问拥有您的属性(property)的对象。然后查询它,以获得可以为您提供数据库服务的服务提供商。它可以通过您自己的API来实现,或者可以从IServiceProvider派生并实现GetService,或者为什么不通过IOC容器将其作为单例获得呢?

关于c# - 具有可变StandardValues的自定义TypeConverter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4616120/

10-09 06:10