C# System.ArgumentException:DataGridViewComboBoxCell值无效

C# System.ArgumentException:DataGridViewComboBoxCell值无效,c#,.net,winforms,datagridview,datagridviewcomboboxcell,C#,.net,Winforms,Datagridview,Datagridviewcomboboxcell,以编程方式将数据分配给DataGridViewComboxCell的有效方法是什么?要解决此问题,只需为DataGridView添加“DataError”。全部步骤如下:双击datagridview并从事件列表中选择“dataerror”事件 DataError事件使您能够处理在数据处理操作期间由控件调用的代码中引发的异常 就是这样:)要解决此问题,请为DataGridView添加“DataError”事件,然后 只要写下:e.Cancel=true e、 g: 派对有点晚了,但我认为这对其他人

以编程方式将数据分配给
DataGridViewComboxCell
的有效方法是什么?

要解决此问题,只需为DataGridView添加“DataError”。全部步骤如下:双击datagridview并从事件列表中选择“dataerror”事件

DataError事件使您能够处理在数据处理操作期间由控件调用的代码中引发的异常


就是这样:)

要解决此问题,请为DataGridView添加“DataError”事件,然后

只要写下:e.Cancel=true

e、 g:


派对有点晚了,但我认为这对其他人还是有用的。在我的例子中,我得到这个错误是因为我添加了一个基于枚举的组合框,如下所示:

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
    e.Cancel = true;
}        
现在,当DataGridView创建一个新(空)行时,这个空值无法映射到组合框。因此,我没有忽略错误,而是为组合框设置了默认值。我添加了事件
defaultvaluesneed
,然后将该值设置为枚举中的一个项目。像这样:

// Combo
DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
combo.DataSource = Enum.GetValues(typeof(PhoneNumberType));
combo.DataPropertyName = "PhoneNumberType";
combo.Name = "PhoneNumberType";
phoneNumberGrid.Columns.Add(combo);

。。异常消失了。

我遇到了一个类似的问题,我在数据源中填充了一个
字典myDict
,我想显示字符串,但要使用一个整数作为基础值:

private void phoneNumberGrid_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
        // Prevent System.ArgumentException: DataGridViewComboBoxCell value is not valid
        e.Row.Cells["PhoneNumberType"].Value = PhoneNumberType.Private;
}
造成问题的原因是我正确设置了:
comboboxcolumn.ValueType=typeof(int)

但是在
CellValueNeeded()
方法中,我随后设置
e.Value=someValueOfMyDict
是一个
字符串
。使用
int
键,您可以消除错误,而不是捕获错误并使其不被处理。

整个代码段是一条语句,因此只有一行。如果您需要为DataGridViewComboxColumn赋予值,请进行好奇的检查-但是捕获错误并对其不做任何处理不是一种坏做法吗?我目前正在努力解决这个问题,我不知道是否可以首先停止抛出错误。如果添加dataError。然后,它会悄悄地提交已编辑的单元格失败。
private void phoneNumberGrid_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
        // Prevent System.ArgumentException: DataGridViewComboBoxCell value is not valid
        e.Row.Cells["PhoneNumberType"].Value = PhoneNumberType.Private;
}
comboboxcolumn.DataSource = new BindingSource(myDict, null);
comboboxcolumn.ValueMember = "Key";
comboboxcolumn.DisplayMember = "Value";