如何取消表单中的更改?

时间:2015-02-14 11:17:44

标签: c# .net wpf winforms

我有一个settingsForm,在这种形式下,用户将更改不同的值,添加/删除数据库中的内容,我需要在使用点击取消按钮时,他所做的所有更改都将被取消并返回上次保存的状态,这是怎么回事有效吗?

2 个答案:

答案 0 :(得分:6)

最简单的方法是在用户点击OK之前不要进行的更改。列出所有必须完成的更改,并在OK上执行该列表。只需关闭取消表单即可。

答案 1 :(得分:0)

您可以使用BeginTransaction然后对数据库执行查询。

private static SqlTransaction transaction;
private static SqlConnection conn;

public static void BeginTransaction()
    {
        try
        {
            transaction = conn.BeginTransaction();
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

如果用户单击“确定”,则执行CommitTransaction

public static void CommitTransaction()
    {
        try
        {
            transaction.Commit();
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

如果用户点击取消,则执行RollbackTransaction

public static void RollbackTransaction()
    {
        try
        {
            transaction.Rollback();
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

您可以在表单加载事件上使用BeginTransaction,例如:

private void Form1_Load(object sender, EventArgs e)
{
        conn.Open();
        ClassName.BeginTransaction();    
}

然后根据点击事件关闭连接。使用取消按钮,他所做的所有更改都将被取消并返回上次保存状态。如果单击“确定”按钮,则所有更改都将提交到数据库。

    private void cancel_Click(object sender, EventArgs e)
    {
        ClassName.RollbackTransaction();
        conn.Close();
    }

    private void ok_Click(object sender, EventArgs e)
    {
        ClassName.CommitTransaction();
        conn.Close();
    }

ClassName是定义连接的类。现在,您可以根据Form_Load处打开的连接执行查询。直到用户按下确定或取消按钮。例如,您可以从表按钮单击执行delete all。

private void deleteAll_Click(object sender, EventArgs e)
{
    SqlCommand cmnd = CreateCommand("TRUNCATE TABLE TABLE_1", CommandType.Text);
    cmd.ExecuteNonQuery();
}

将对数据库进行更改(全部删除),具体取决于用户点击cancelok