DataGridView、BindingList、DataGridViewComboBoxColumn
所以,我有一个 DataGridView 使用 BindingList 作为数据源,
DataGridView.DataSource = new BindingList<Car>{...}
使用
public class Car
{
public ColorName Color { get; set;}
}
其中
public class ColorName
{
public int Id {get; set;}
public string Name{get; set;}
}
Combobox 列:
DataGridViewComboBoxColumn colorNameDataGridViewTextBoxColumn;
colorNameDataGridViewTextBoxColumn.DataPropertyName = "Color";
colorNameDataGridViewTextBoxColumn.HeaderText = "Color";
colorNameDataGridViewTextBoxColumn.Name = "Color";
colorNameDataGridViewTextBoxColumn.DisplayMember = "Name";
colorNameDataGridViewTextBoxColumn.ValueMember = "Id";
colorNameDataGridViewTextBoxColumn.DataSource = new ColorName[] {...};
我怎样才能让它工作?! 现在我收到一个异常,因为我认为它尝试将 Id 转换为 ColorName。
我尝试使用空 ValueMember 或向 ColorName 类添加直接转换运算符,但无法使其工作。
当然,我可以在 Car 类中使用 int 来表示颜色,但不太好。
正如您可能猜到的那样,这些类实际上是 Castle Project ActiveRecord-s。
欢迎任何想法!
So, I have a DataGridView using as datasource a BindingList
DataGridView.DataSource = new BindingList<Car>{...}
Where
public class Car
{
public ColorName Color { get; set;}
}
with
public class ColorName
{
public int Id {get; set;}
public string Name{get; set;}
}
and I use a Combobox column:
DataGridViewComboBoxColumn colorNameDataGridViewTextBoxColumn;
colorNameDataGridViewTextBoxColumn.DataPropertyName = "Color";
colorNameDataGridViewTextBoxColumn.HeaderText = "Color";
colorNameDataGridViewTextBoxColumn.Name = "Color";
colorNameDataGridViewTextBoxColumn.DisplayMember = "Name";
colorNameDataGridViewTextBoxColumn.ValueMember = "Id";
colorNameDataGridViewTextBoxColumn.DataSource = new ColorName[] {...};
How can I get this to work ?! Now I get an exception because I think it tries to cast the Id to ColorName.
I tried with an empty ValueMember or adding a direct cast operator to ColorName class but can't get it to work.
Sure I can use an int in the Car class to represent the color but is not as nice.
As you probably guessed those classes are in fact Castle Project ActiveRecord-s.
Any ideas are welcome !
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您尝试过 ValueMember = "" 或 ValueMember = "." 吗?
真的很hacky,但是您可以在
ColorName
上添加一个本身的属性吗? (也许通过部分类)然后设置 `ValueMember = "Self";'
除此之外,您可能需要一个
TypeConverter
另一个选项可能是重写
ColorName
上的ToString()
以返回Name
,并且没有值/显示成员?(更新:不,没有)
已检查,ToString()
似乎可以工作:并且只是不设置DisplayMember 或一个
ValueMember
。好吧,你知道吗——“Self”技巧也有效......
Did you try ValueMember = "" or ValueMember = "."?
Really hacky, but you could add a property on
ColorName
that is itself? (perhaps via a partial class)then set `ValueMember = "Self";'
Other than that, you'd probably need a
TypeConverter
The other option might be to override
ToString()
onColorName
to returnName
, and not have a value/display member?(update: no it doesn't)
Have checked, andToString()
seems to work :and just don't set aDisplayMember
or aValueMember
.Well whad'ya know - the "Self" trick works too ...