c# Winforms DatagridviewCombobox异常字符串不能转换为类

本文关键字:转换 不能 字符串 Winforms DatagridviewCombobox 异常 | 更新日期: 2023-09-27 18:07:23

当从datagridviewcombobox(下拉菜单)控件中嵌入到datagridview中时,我遇到了一个异常。这个组合框由BindingSource填充,它由我的类的实例填充。我可以正确地显示菜单中的选项,并选择一个,但将焦点更改到新控件(我猜是提交更改)会导致出现异常:Invalid Cast from System。到myclass的字符串。堆栈跟踪(如果我用对了这个词的话)显示源是

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

下面是一个更明确的解释(抱歉这么长,但我想让它可复制):

我有一个空类称为占有者,没有属性(问题存在时占有者也有一个字符串名称属性,所以它不是)。我有一个名为占用源的绑定源,其数据源指向占用者。

我还有一个叫做Car的类,它有一个叫做Driver的占用属性。

在我的Form_Load()中,我调用了两次occuantsource . addnew(),调用了一次CarSource.AddNew()。

我有一个DataGridView控件,其数据源是CarSource(由Cars组成的BindingSource)。DGV有一列,显示CarSource中汽车的Driver属性。它是一个DataGridViewComboBoxColumn,其中DataPropertyName设置为driver。

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

这是我误解了什么吗?你可以不使用类的实例来填充DataGridViewComboBox吗?

c# Winforms 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'的引用来显示成员!),它可能会修复它。