如何在 属性 网格 属性 中实现查找值
How to implement a lookup value in property grid property
使用 C#、Winforms、PropertyGrid。
假设我有以下 class:
public class SomeClass
{
public int Key;
public Guid LookupKey;
}
//This class is a lookup class
public class Lookup
{
public Guid Key;
public string Description;
}
例如查找数据 table
Key Description
[SomeGuidValue1] Value1
[SomeGuidValue2] Value2
SomeClass.LookupKey = Lookup.Key
现在.. 我已经让 UIEditor 显示了一个包含查找值的 DataGridView table。但是在 属性 网格中.. 我显示的是 Guid 值而不是描述。如何在 属性 网格 属性 中保持 Guid(密钥)的同时显示描述?即我想显示 Value1 而不是 [SomeGuidValue1] 但它应该保留对 [SomeGuidValue1]?
的引用
您可以创建一个 TypeConverter,如下所示:
public class SomeClass
{
public int Key { get; set; }
[TypeConverter(typeof(LookupConverter))]
public Guid LookupKey { get; set; }
}
public class LookupConverter : TypeConverter
{
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(string)) //property grid will ask for this
{
var key = (Guid)value;
return ConvertGuidToDescription(...) // TODO: implement this
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
使用 C#、Winforms、PropertyGrid。
假设我有以下 class:
public class SomeClass
{
public int Key;
public Guid LookupKey;
}
//This class is a lookup class
public class Lookup
{
public Guid Key;
public string Description;
}
例如查找数据 table
Key Description
[SomeGuidValue1] Value1
[SomeGuidValue2] Value2
SomeClass.LookupKey = Lookup.Key
现在.. 我已经让 UIEditor 显示了一个包含查找值的 DataGridView table。但是在 属性 网格中.. 我显示的是 Guid 值而不是描述。如何在 属性 网格 属性 中保持 Guid(密钥)的同时显示描述?即我想显示 Value1 而不是 [SomeGuidValue1] 但它应该保留对 [SomeGuidValue1]?
的引用您可以创建一个 TypeConverter,如下所示:
public class SomeClass
{
public int Key { get; set; }
[TypeConverter(typeof(LookupConverter))]
public Guid LookupKey { get; set; }
}
public class LookupConverter : TypeConverter
{
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(string)) //property grid will ask for this
{
var key = (Guid)value;
return ConvertGuidToDescription(...) // TODO: implement this
}
return base.ConvertTo(context, culture, value, destinationType);
}
}