我最近问了这个问题on here并得到了答案。但是,我现在正在尝试在DataGridView上应用相同的逻辑,该DataGridView绑定到BindingList< T>课程对象。 Curriculum类具有Year类型的属性。我正在尝试使用ComboBoxColumn来更新课程对象多年来的参考。
组合框列绑定到BindingList< T>多年来,如果我设置显示成员或值成员,它会出错,所以我将它们留空。这样做datagridview成功加载并正确显示数据(我覆盖了年级上的ToString方法)。但是,如果我从组合框中选择另一个年份对象,一旦它结束编辑它就抛出并且异常说它不能将字符串转换为类型年份。
看起来我需要一个TypeConverter才能做到这一点,但问题是组合框显示了一个描述性的值,我无法保证该年份对象是唯一的 - 所以我无法获得一年的对象来自给定的字符串。
有没有人在这样的情况下有任何经验,这一定是很常见的事情,但谷歌在这个场合让我失望了。
马龙
答案 0 :(得分:3)
与here相同的问题。似乎组合框列中的对象绑定无法正常工作,您必须指定ValueMember。
对于我正在处理的特定项目,我得出的结论是,不值得实现自定义类型描述符,所以相反,我使用了一个相当可怕的黑客:
在我绑定的实体中,我有以下内容:
class TestEntity
{
public TestEntity BindingHack_ValueMember
{
get
{
return this;
}
}
public string BindingHack_DisplayMember
{
get
{
return this.ToString();
}
}
}
列的数据绑定如下所示:
column.DataPropertyName = "Foo";
column.DisplayMember = "BindingHack_DisplayMember";
column.ValueMember = "BindingHack_ValueMember";
或许有点难看,但它有效......