0

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

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

4

1 回答 1

0

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

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

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

于 2018-11-17T23:21:35.360 回答