检查表单数据是否已更改

本文关键字:是否 数据 检查表 表单 检查 | 更新日期: 2023-09-27 18:08:39

我一直在尝试以下c#代码来检查表单数据是否在关闭和保存之前已更改,但似乎它总是报告表单被更改,即使没有更改。

//Declare a private variable
 private bool requiresSaving =false; 
 //Declare an event
 private void SomethingChanged(object sender, EventArgs e) 
 { 
      requiresSaving  = true; 
 } 
 //Hook up this event to the various changed events, eg
 this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged); 

//Check this variable when you are closing the form
private void DepartamentEdit_FormClosing(object sender, FormClosingEventArgs e) 
{ 
if (requiresSaving) 
{ 
  .... 

你还需要在savedeparme方法中设置requiresSaving为false

检查表单数据是否已更改

我认为您甚至在加载初始数据之前就连接了这些事件。然后SomethingChanged触发并启用保存按钮,即使用户没有更改任何内容。

您可以在加载默认/现有数据时解绑定这些事件,也可以在加载默认/现有数据后绑定这些事件。

//Un-Hook when loading your default/existing data.
 private void SetDefaultData()
 {
     this.txtNameDepart.TextChanged -= new System.EventHandler(this.SomethingChanged); 
     this.txtNameDepart = "My default text";
     this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged); 
 }

您应该显示所有您将标志设置为true的地方,以防万一。

也是这个代码:

//Hook up this event to the various changed events, eg
 this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged)

即使理解你想做什么,我认为这是不好的,因为如果你有很多控件,迟早你会处理每个变化事件的逻辑与一些更具体的代码为单个控件,你不应该附加相同的事件处理程序到所有他们一次。

如果你所有的控件都绑定到一个BindingSource,你可以使用另一种方法。

如果您的控件是由您在表单加载时使用来自业务对象的一些赋值手动填充的,您还可以想象将这些对象的属性与原始对象(当然,如果您还保存了原始对象的副本)在form_closing.

中进行比较。