【问题标题】:Detect unsaved changes in DataGridView on form closing VB.NET在关闭 VB.NET 的表单上检测 DataGridView 中未保存的更改
【发布时间】:2014-08-28 18:45:09
【问题描述】:

您好,我有一个 DataGridView,它有一个数据表作为它的数据源。我有一个使用 DataTable.GetChanges() 方法的函数,当我在表单仍处于活动状态时运行该函数时,它工作得很好;但是,我将该函数放在表单关闭事件中,以便在关闭表单时检查未保存的更改,但由于某种原因,当我从关闭方法运行它时,它总是返回没有任何更改。

我猜在我的函数运行以获取更改之前,数据源会在关闭时自动处理。

有没有办法阻止数据源被处理掉?我尝试在表单关闭事件中执行 e.Cancel=True 然后运行我的函数,但它仍然不起作用。

对此的任何帮助将不胜感激。

【问题讨论】:

  • 应用程序关闭的方式/原因。还有不止一种方法,并不是所有的方法都会调用这些事件
  • 当你点击表单右上角的红色x时

标签: vb.net winforms datagridview datasource formclosing


【解决方案1】:

您确定您参与了 Handles Me.FormClosing 事件吗?我知道我在使用 OnFormClose 事件时遇到了同样的问题。我的程序使用 Me.FormClosing 可以正常工作我所做的只是检查

如果 dataset.has 发生变化,那么 调用保存逻辑() 结束如果

数据表应该是一样的。

【讨论】:

  • 是的,我正在使用 Me.FormClosing。我对此感到很困惑。
  • 您是否在任何地方接受数据表的更改?如果在此代码被击中之前有人运行了 datatable.acceptchanges() 那么您的更改将不会被发现。除此之外,您可能需要检查您正在使用的数据表的范围。
  • 调试时我也会检查表的值。您应该能够打断点并看到您的表在该点仍然存在。在 Visual Studio 中执行 Shift+F9 并查看您的表格,只要它不为空即可。
  • accept changes 方法只在我保存数据后被调用一次;但是,我在它上面设置了一个断点,以确保当我的表单关闭时它正在运行,而它不是。
  • 我没有足够的代表来为您的回复添加评论。但是您可以在 datagridview 尝试查看是否有更改之前对其执行结束编辑。它可以让您保存而不必按 Enter 或 Tab。
【解决方案2】:

我想通了。事实证明,当我在 DataGrid 中输入一些内容而没有按 Enter 提交该编辑时,它才没有保存更改。它实际上与表单关闭无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多