【问题标题】:Combobox in a datagridview giving errors when adding a new row添加新行时datagridview中的组合框给出错误
【发布时间】:2013-11-06 00:21:44
【问题描述】:

datagridview 中的组合框列出现问题:当我想插入新行时,我收到“System.ArgumentException:DataGridViewComboBoxCell 的值无效”。我正在使用 Linq to SQL 填充来自不同表的数据:

  • 表客户(ID(键),姓名,...)
  • 表地址(ID(键)、CustomerID、街道...)
  • 表 ContactPerson(ID(键)、AddressID、姓名、职务……)

用于填充 ContactDataGridView(绑定到 TextBox RelationIdTextBox)的 Linq 查询如下:

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:

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 的值 无效。”

谁能帮助我理解我做错了什么?实在想不通!

【问题讨论】:

  • 我在我的数据库中的其他表上进行了尝试,但我不断收到相同的错误。我注意到只有当组合框单元格可能不包含空值时才会出现此错误。现在,我怎样才能防止这个错误,让用户决定他想从这个组合框中的可能值中选择哪个值?
  • DataGridViewComboBoxColumn 是什么栏目?添加新行的代码是什么?

标签: c# sql linq datagridview


【解决方案1】:

我遇到了完全相同的问题,我通过在向网格中添加新行时设置默认值来解决它,该默认值必须是组合框中现有的 id 之一。

private void datagridview_base1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
    {
        e.Row.Cells[3].Value = 1; // Cells[x] = your AdressID cell
    }

将“1”替换为地址表中存在的任何 ID,通常是对应于组合框第一项的 ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多