怎么知道更新之前我的表单已经完成了更改

时间:2012-11-26 12:20:11

标签: c# .net winforms

从数据库中重新获取数据后,当我单击“更新”按钮时,会出现一个消息框,其中“已完成更改。您是否愿意继续”,并显示“是/否”按钮。但是,当我仅进行任何更改时,我想要提高消息框。如果我没有做任何更改,它不应该提高..请帮助我如何知道我的文本框和combox中的更改。 我提出的代码是

DialogResult result = MessageBox.Show("Chanes has done, Do you wish to save changes.?", "Message",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
// HERE MY UPDATE CODE.
}

2 个答案:

答案 0 :(得分:2)

选项1:在显示消息之前,将旧值与新值进行比较

选项2:在表单中添加成员变量 dirty ,并注册以更改每个子控件的事件。
在事件处理程序中:检查值是否已更改。如果是这样,将 dirty 设置为true。

选项3:(我最喜欢的。)不要进行任何检查,因为维护这些检查太难了。您需要更改数据结构或子控件中每个更改的检查 只需从邮件中删除“已完成更改”即可。用户知道自己是否真的改变了他的数据。所以只要问“你想保存更改吗?”。

答案 1 :(得分:0)

您需要将原始值存储为字符串,然后将这些值与结果值进行比较。

或者,更简单的实现可以在文本框更改事件上将布尔isDirty标志设置为true,并在成功更新时重置为false。

示例代码有助于突出显示以下内容:

if(ValuesHaveChanged())
{
    DialogResult result = MessageBox.Show("Data has been changed, do you wish to save changes?", "Save Changes",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (result == DialogResult.Yes)
    {
        // HERE MY UPDATE CODE.
        ResetChangeDetection();
    }
}

private bool ValuesHaveChanged()
{
    return this.isDirty;
    /*
    return ! 
    (
        this.savedName.Equals(NameTextbox.Text)
        && this.savedAddress.Equals(AddressTextbox.Text)
    )
    */
}

private void ResetChangeDetection()
{
    this.isDirty = false;
    //this.savedName = NameTextbox.Text;
    //this.savedAddress = AddressTextbox.Text;
}