【问题标题】:How to get cell value change when closing form?关闭表单时如何更改单元格值?
【发布时间】:2010-10-27 14:03:19
【问题描述】:

我有一个带有 DataGridView 的表单。

在这个DataGridView 中有一个DataGridViewComboBoxColumn。当更改此 DataGridViewComboBoxColumn 的单元格的值时,CellValueChanged 事件仅在离开单元格时触发(例如,如果我单击另一个单元格)。 当我更改值然后关闭表单时,不会触发该事件。

那么,如果我的表单只是关闭了,我该如何保存更改(如果有任何更改)?

[更新]

当 DataGridView 所在的窗体通过 form.ShowDialog() 显示时,不会触发 CellValueChanged:

using (FormWithDataGridView form = new FormWithDataGridView()) {
    form.ShowDialog();   // DataGridView on form fires no CellValueChanged-Event when form gets closed
}

【问题讨论】:

  • 我试过了,当我关闭表单时 CellValueChanged 甚至已经触发了!你能重试它并确保你正在更改原始值。
  • 搞笑:我创建了一个小项目,复制了我的 DataGridView-initialisation-code 并且 CellValueChanged 事件也被触发了。但不是在我的实际应用程序中...?-|
  • 停止编辑单元格时是否触发事件?我的意思是,如果您选择一个值,然后触发 EndEdit 事件(或类似事件),它会起作用吗?如果是这样,那么您可以在表单关闭时检查您是否处于编辑模式,如果是,则结束编辑。

标签: c# .net winforms events datagridview


【解决方案1】:

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

作为一种解决方法,在表单关闭事件中,您可以从DataGridView 移除焦点,这将在必要时触发CellValueChanged 事件。如果表单上没有任何其他控件可以设置焦点,则可以在表单上放置一个标签并赋予它焦点。

【讨论】:

    【解决方案2】:

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

    [编辑] 现在,当我再想一想时,如果我是你,我会尝试dataGridView1.CellEndEdit。这样更好..[/Edit]

    【讨论】:

      【解决方案3】:

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

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

      对我来说,我之后调用数据适配器,它会识别出对 datagridview 的更改——所以它可以工作。

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 2022-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-07
        • 2018-08-28
        • 1970-01-01
        • 2021-03-17
        相关资源
        最近更新 更多