C#Winforms DatagridviewCombobox异常String无法转换为类

我从datagridview中嵌入的datagridviewcombobox(下拉菜单)控件中选择一个新值时遇到异常.组合框由BindingSource填充,其中填充了我的类的实例.我可以正确显示菜单中的选项,然后选择一个,但是将焦点更改为新控件(我猜想提交更改)会导致出现异常:从System.String到myclass的无效转换.堆栈跟踪(如果我正确使用该字)显示源是

System.Windows.Forms.DataGridView.PushFormattedValue
级联到
System.Convert.DefaultToType

下面有一个更明确的解释(抱歉它很长,但我想让它可重复):

我有一个名为Occupant的空类,没有属性(当Occupant也有一个字符串Name属性时,问题就存在了,所以不是这样).我有一个名为OccupantSource的BindingSource,其DataSource指向Occupant.

我还有一个叫做Car的类,有一个名为Driver的Occupant属性.

在我的Form_Load()中,我两次调用OccupantSource.AddNew(),并调用一次CarSource.AddNew().

我有一个DataGridView控件,其DataSource是CarSource(由Cars组成的BindingSource). DGV有一列,显示CarSource中汽车的Driver属性.它是一个DataGridViewComboBoxColumn,DataPropertyName设置为驱动程序.

所以我想要的是在Datagridview中显示汽车行,其中一列是组合框,我可以下拉并从现有的Occupant实例中选择一个驱动程序.但我得到了例外.

这是我误解的事吗?你能不能使用类的实例来填充DataGridViewComboBox?

解决方法:

我遇到了完全相同的问题并且正在抓挠我的头,使用我的google-fu几个小时试图解决它.这个链接帮我终于给了我一个很好的解释.
http://www.pcreview.co.uk/forums/datagridview-combobox-column-error-listing-objects-t2344961.html

我修复它的方法是改变DisplayMember.
我在返回’this’的类中引用了’Self’ – 我在DisplayMember和ValueMember中使用它来认为它只是ToString()来自DisplayMember的属性.

阅读您的解释,您可能根本没有设置DisplayMember和ValueMember?如果是这种情况,请尝试正确设置它们(并且不要对显示成员使用’this’的引用!)它可能会修复它.

上一篇:关于easyui combobox下拉框实现多选框的实现


下一篇:下拉选择框QCombox