我有一个带有DataGridView的表单。
在这个DataGridView中有一个DataGridViewComboBoxColumn。更改此DataGridViewComboBoxColumn的单元格的值时,仅在离开单元格时触发CellValueChanged事件(例如,如果我单击进入另一个单元格)。 当我更改值然后关闭表单时,不会触发该事件。
那么,如果我的表单只是关闭了,我如何保存更改(如果有任何更改)?
[UPDATE]
当通过form.ShowDialog()显示DataGridView所在的表单时,不会触发CellValueChanged:
using (FormWithDataGridView form = new FormWithDataGridView()) {
form.ShowDialog(); // DataGridView on form fires no CellValueChanged-Event when form gets closed
}
答案 0 :(得分:3)
在ShowDialog的MSDN条目上的社区内容帖子中,当您关闭模式表单时,它只是被隐藏,因此调用代码仍然可以访问DialogResult
或其他属性表格。显然,这就是CellValueChanged
上的DataGridView
事件未被触发的原因(CellParsing
和CellEndEdit
事件也未被提升。
作为一种变通方法,在表单结束事件中,您可以从DataGridView
中删除焦点,这将导致CellValueChanged
事件在必要时触发。如果您在表单上没有任何其他控件来设置焦点,您可以在表单上放置一个标签并给它重点。
答案 1 :(得分:0)
您是否尝试过使用dataGridView1.CellParsing
?这应该(据我所知)触发,即使由于关闭包含的表格而导致单元格的焦点丢失。只有在用户更改了单元格的值时才会触发此操作。
[编辑]现在当我想到它时,如果我是你,我会尝试dataGridView1.CellEndEdit
。那更好.. [/编辑]
答案 2 :(得分:0)
我自己也遇到了类似的情况,但最后一个复选框以编程方式更新 - 除非我切换行,否则不会更新。
在更新组合框之前尝试调用BindingSource.EndEdit方法。
对我来说,之后我会调用数据适配器并识别对datagridview的更改 - 因此它可以正常工作。