猿问

Winform EF 数据网格视图数据绑定结果在 DataGridViewComboBoxCell

DataGridViewComboBoxCell 绑定略有相关- “值无效” - 我有一个 EF Database First 项目,其中我有三个表(当然还有匹配的类表示):

分析历史价值

检测结果类型

检测使用类型

“类型”表中包含名称描述,但 DataGridView 需要从 ComboBox 中选择名称并将 ID 本身存储在后台数据库中。

我在 Edit Columns UI 中设置了所有这些,该 UI 对 Designer 代码进行了调整 - 一切看起来都正确:

然后,当我意识到正在抛出错误时:


DataGridViewComboBoxCell 值无效


我意识到其他一些人有这个问题(例如我上面链接的帖子)和其他地方的在线。有人说抑制错误对他们有用,但这只会导致以下错误:


'当设置了 DataSource 属性时,不能修改项目集合。'


在下面的 Items.Add 行:


private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)

{

    //Avoid error of data bound combobox cells

    if (e.Exception.Message == "DataGridViewComboBoxCell value is not valid.")

    {

        object value = ConstantsGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

        if (!((DataGridViewComboBoxColumn)ConstantsGridView.Columns[e.ColumnIndex]).Items.Contains(value))

        {

            ((DataGridViewComboBoxColumn)ConstantsGridView.Columns[e.ColumnIndex]).Items.Add(value);

            e.ThrowException = false;

        }

    }

}

此外,我尝试只在列中使用“AssayResultType”或 Usage 类型对象(当您添加要更新的实体对象/表时,它会预先弹出) - 这也不起作用。


我可能更容易编写 LINQ 语句等来填充所有这些,因为结构非常简单,但我觉得这里设置的绑定应该为这样的事情做大部分工作。关于这里可能发生什么的想法?


12345678_0001
浏览 149回答 1
1回答

当年话下

根据图片,您允许用户在DataGridView. 如果是这种情况,那么 DataGridView 将尝试将AssayResultTypeIdcolumn( integer => 0) 的默认值绑定到DataSource对应的组合框列。作为解决方法,您可以尝试Allow add rows在DataGridView.或者将“空”记录添加到组合框列的绑定源var defaultResult = new AssayResultType { Id = 0, Name = "Please select type..." };// Insert because you want keep it on the top of the listresultTypesCollection.Insert(0, defaultResult); 
随时随地看视频慕课网APP
我要回答