首页 > 解决方案 > 启用不在列表中显示的值 - System.ArgumentException:DataGridViewComboBoxCell 值无效

问题描述

数据网格视图中有一个列。我为它创建了一个DataGridViewComboBoxColumn并将数据源设置为值列表。

DataGridViewComboBoxColumn1.DataSource = new List<string>{ "...", "..." };

并非所有列的值都在列表中。我希望用户能够选择列表中的值并更新列表中不存在的这些值的值。

但是,在加载数据网格视图时,系统会不断弹出以下错误,因为这些值不在列表中。

System.ArgumentException:DataGridViewComboBoxCell 值无效。

它是另一个用于此目的的数据网格视图控件吗?或者是否可以抑制错误?

标签: c#winforms

解决方案


您需要处理以下事件:

  • DataError:在渲染单元格时防止出现异常对话框。
  • CellFormatting:显示组合框值中不存在的单元格的值。

例子

private void Form1_Load(object sender, EventArgs e)
{
    var dt = new DataTable();
    dt.Columns.Add("C1");
    dt.Rows.Add("A");
    dt.Rows.Add("B");
    dt.Rows.Add("C");
    dt.Rows.Add("D");

    var column = new DataGridViewComboBoxColumn();
    column.DataPropertyName = "C1";
    column.Name = "C1";
    column.DataSource = new List<string> { "A", "B" };

    dataGridView1.DataError += (s, a) =>
    {
        if (a.ColumnIndex == 0)
            a.ThrowException = false;
    };
    dataGridView1.CellFormatting += (s, a) =>
    {
        if (a.ColumnIndex == 0)
        {
            a.Value = dataGridView1[a.ColumnIndex, a.RowIndex].Value;
            a.FormattingApplied = true;
        }
    };

    dataGridView1.Columns.Add(column);
    dataGridView1.DataSource = dt;
}

推荐阅读