C# 如何取消表单中的更改?

C# 如何取消表单中的更改?,c#,.net,wpf,winforms,C#,.net,Wpf,Winforms,我有一个设置表单,在这个表单中,用户将更改不同的值,从数据库中添加/删除内容,我需要当用户点击“取消”按钮时,他所做的所有更改都将被取消并返回到上次保存的状态,这是如何工作的?最简单的方法是在用户点击“确定”之前根本不进行更改。列出所有必须完成的更改,并仅在“确定”时执行该列表。只需在“取消”时关闭表单。最简单的方法是,在用户点击“确定”之前,不要进行任何更改。列出所有必须完成的更改,并仅在“确定”时执行该列表。只需在取消时关闭表单。您可以使用BeginTransaction然后对数据库执行查询

我有一个设置表单,在这个表单中,用户将更改不同的值,从数据库中添加/删除内容,我需要当用户点击“取消”按钮时,他所做的所有更改都将被取消并返回到上次保存的状态,这是如何工作的?

最简单的方法是在用户点击“确定”之前根本不进行更改。列出所有必须完成的更改,并仅在“确定”时执行该列表。只需在“取消”时关闭表单。

最简单的方法是,在用户点击“确定”之前,不要进行任何更改。列出所有必须完成的更改,并仅在“确定”时执行该列表。只需在取消时关闭表单。

您可以使用
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;
        }
    }
public static void RollbackTransaction()
    {
        try
        {
            transaction.Rollback();
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
如果用户单击取消,则执行回滚事务:

public static void CommitTransaction()
    {
        try
        {
            transaction.Commit();
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
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\u Load
中打开的连接执行查询。直到用户按下“确定”或“取消”按钮。例如,您可以执行“从表中全部删除”按钮单击

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

并且对数据库进行更改(全部删除)与否,取决于用户单击
取消
确定
您可以使用
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;
        }
    }
public static void RollbackTransaction()
    {
        try
        {
            transaction.Rollback();
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
如果用户单击取消,则执行回滚事务:

public static void CommitTransaction()
    {
        try
        {
            transaction.Commit();
        }
        catch (SqlException ex)
        {
            throw ex;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
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\u Load
中打开的连接执行查询。直到用户按下“确定”或“取消”按钮。例如,您可以执行“从表中全部删除”按钮单击

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

并且对数据库的更改(全部删除)是否会进行,取决于用户单击
取消
确定

这取决于您如何加载初始数据,如果您在每个步骤中保存更改,或仅当用户单击确定时保存更改。您需要在此处显示相关代码。这取决于您如何加载初始数据,如果您在每个步骤中保存更改,或者仅在用户单击“确定”时保存更改。您需要在此处显示相关代码。