【发布时间】:2016-02-27 14:21:29
【问题描述】:
我已将数据网格视图和组合框绑定到我的表(由实体框架管理):
eraDataGridView.DataSource = BillContext.Eras.Local.ToBindingList();
eraComboBox.DataSource = BillContext.Eras.Local.ToBindingList();
eraComboBox.DisplayMember = "Name";
我已经为数据网格视图创建了一个保存按钮:
private void saveEras_Click(object sender, EventArgs e) {
BillContext.SaveChanges();
saveEras.Enabled = false;
}
当我在数据网格视图中插入新行时;如果我在完成编辑行后选择另一行(通过单击另一行,按 Tab 或 Enter)然后单击保存按钮,一切都按预期工作,但是如果我按下保存按钮而不更改行;组合框将有一个没有文本的新项目(这是新行但没有文本)。
如何使组合框在所述场景中显示新添加行的文本?任何解决方法将不胜感激。
【问题讨论】:
-
如果您创建了一个新行,但不更改它,那么它将代表一个新的但为空的项目,这将在
ComboBox中明显显示,就像它一样 - 作为空值。还是我错过了什么?如果您想避免这种行为,那么您应该在保存更改之前以某种方式过滤并从saveEras_click处理程序中的基础集合中删除这些空项目。您也可以尝试一些包装器集合,为 ComboBox 过滤这些项目,但空项目仍会到达数据库。 -
我认为这很明显,但在我描述的场景中,我确实更改了行但显示空文本或显示我写的文本取决于编辑后选择另一行或不选择另一行和保存
-
也许您的项目没有实现 INotifyProperyChanged?
-
我不确定,我正在使用 System.Windows.Forms.ComboBox 和 System.Windows.Forms.DataGridView。我该怎么办?
-
INotifyProperyChanged 允许所有绑定控件看到项目中的更改。
BindingList只允许检测和通知项目集合的变化,但是如果修改了一个单独的项目并且它没有实现INotifyProperyChanged,那么除非完全集合/绑定重新加载,否则其他人将不会看到它或对其做出反应。默认情况下,您的 EF 实体很可能不会实现它。
标签: c# entity-framework datagridview combobox