问题  Datagridview给出错误在comboboxcell上添加新行

已加入
2013年11月5日
留言内容
8
编程经验
Beginner
你好,

我在datagridview中的comboboxcolumn遇到问题:当我想插入新行时,我得到一个"System.ArgumentException:DataGridViewComboBoxCell的值无效。"我正在使用Linq to SQL来填充来自不同表的数据:

-表客户(ID(密钥),名称,...)
-表格地址(ID(键),CustomerID,Street等)
-表ContactPerson(ID(键),AddressID,名称,标题等)

我的Linq查询用于填充ContactDataGridView(绑定到TextBox RelationIdTextBox),如下所示:
C#:
var y = from r in BH.Relations
                        where r.RelationID.ToString() == relationIDTextBox.Text
                        join v in BH.Addresss on r.RelationID equals v.RelationID
                        join c in BH.ContactPersons on v.AddressID equals c.AddressID
                        select c;
    contactPersonsBindingSource.DataSource = y;
    ContactDataGridView.DataSource = contactPersonsBindingSource;
这很好。

在这个ContactDataGridView中,我有一个ComboBoxCell AddressID,它使用以下linq查询填充街道名称而不是AddressID:
C#:
    var addr = from a in BH.Addresss
                           where a.RelationID.ToString() == relationIDTextBox.Text
                           select new { AddressID = a.AddressID, Street = a.Street };
    ContactAddressBindingSource = addr;
这也很好。

也就是说,直到我想在此datagridview中添加新行。然后我得到了错误"System.ArgumentException:DataGridViewComboBoxCell的值无效。"

谁能帮助我了解自己在做什么错?我真的无法弄清楚!

Thanks!
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,534
地点
悉尼,澳大利亚
编程经验
10+
这意味着该单元格中的AddressID值与绑定到组合框列的列表中的任何AddressID不匹配。我猜想AddressID默认为零,并且下拉列表中没有零值。如果是这样,那就是您的问题。该列中单元格中的每个值都必须与下拉列表中的值匹配或为DBNull.Value。如果您的AddressID列不可为空,则它不能为DBNull.Value,因此您必须将其设置为有效的默认值。最好使它在您的实体类中为空,即使它不在数据库中也是如此。
 
已加入
2013年11月5日
留言内容
8
编程经验
Beginner
我在数据库中的其他表上进行了尝试,但仍然出现相同的错误。我注意到,仅当comboboxcell可能不包含空值时,才出现此错误。现在,如何防止此错误,并让用户决定要从此组合框中的可能值中选择哪个值?
 
最佳 底部