关闭表单时如何更改单元格值?

时间:2010-10-27 14:03:20

标签: c# .net winforms events datagridview

我有一个带有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
}

3 个答案:

答案 0 :(得分:3)

ShowDialog的MSDN条目上的社区内容帖子中,当您关闭模式表单时,它只是被隐藏,因此调用代码仍然可以访问DialogResult或其他属性表格。显然,这就是CellValueChanged上的DataGridView事件未被触发的原因(CellParsingCellEndEdit事件也未被提升。

作为一种变通方法,在表单结束事件中,您可以从DataGridView中删除焦点,这将导致CellValueChanged事件在必要时触发。如果您在表单上没有任何其他控件来设置焦点,您可以在表单上放置一个标签并给它重点。

答案 1 :(得分:0)

您是否尝试过使用dataGridView1.CellParsing?这应该(据我所知)触发,即使由于关闭包含的表格而导致单元格的焦点丢失。只有在用户更改了单元格的值时才会触发此操作。

[编辑]现在当我想到它时,如果我是你,我会尝试dataGridView1.CellEndEdit。那更好.. [/编辑]

答案 2 :(得分:0)

我自己也遇到了类似的情况,但最后一个复选框以编程方式更新 - 除非我切换行,否则不会更新。

在更新组合框之前尝试调用BindingSource.EndEdit方法。

对我来说,之后我会调用数据适配器并识别对datagridview的更改 - 因此它可以正常工作。