首页 文章

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

提问于
浏览
1

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

  • 3

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

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

  • 0

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

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

  • 0

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

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

    对我来说,我之后调用数据适配器,它识别对datagridview的更改 - 所以它完成了工作 .

相关问题