我在Win.Forms DataGridView控件中遇到数据绑定问题。 例如:
public class A
{
public String Title {get; set; }
public B BField { get; set; }
}
public class B
{
public String Name { get; set; }
}
我希望在B.(BField.Name
)的列值中看到。
我尝试使用下一种方式获取数据密钥,只填充BField.Name
值,但它对我不起作用。否则,我希望有机会通过DataGridView查找此字段值。
我也尝试创建:
class A
{
...
public String BField_Name
{
get{return BField.Name;}
set{BField.Name = value;}
}
}
但它也不起作用。 你能帮我解决这个问题吗?
谢谢!
最诚挚的问候, 亚历山大。
答案 0 :(得分:1)
要在Grid中正确显示“B”类值,请覆盖 ToString 方法以返回Title属性。
然后,您可以为“B”类创建一个TypeConvertor,以便Grid知道如何将字符串单元格值转换为“B”类类型,即
public class BStringConvertor : TypeConverter
{
public BStringConvertor()
: base()
{
}
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
// Allow conversion from a String type
if (sourceType == typeof(string))
return true;
return base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
// If the source value is a String, convert it to the "B" class type
if (value is string)
{
B item = new B();
item.Title = value.ToString();
return item;
}
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
// If the destination type is a String, convert the "B" class to a string
if (destinationType == typeof(string))
return value.ToString();
return base.ConvertTo(context, culture, value, destinationType);
}
}
然后,您可以将转换器应用于“A”类的“B”类属性,即
public class A
{
public string Title { get; set; }
[TypeConverter(typeof(BStringConvertor))]
public B BField { get; set; }
}
public class B
{
public string Title { get; set; }
public override string ToString()
{
return this.Title;
}
}