从嵌入在数据网格视图中的数据网格视图组合框(下拉菜单)控件中选择新值时遇到异常。组合框由 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 吗?