ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-05-21 14:52:38  阅读:284  来源: 互联网

标签:c winforms combobox datagridviewcombobox


我从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’的引用!)它可能会修复它.

标签:c,winforms,combobox,datagridviewcombobox
来源: https://codeday.me/bug/20190521/1147696.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有