DataTable 上的 RejectChanges() 删除 DataGridView 中的所有行

RejectChanges() on DataTable removes all rows in DataGridView

我有一个小问题,我找不到解决方案。

我有一个带有自定义 dataGridView 的表单。 此 datagridView 接受数据源。 DataSource 是我自己创建的数据表(稍后将由数据库数据表替换)。 目前一切正常。

现在我的表单中有 2 个按钮。 一个保存,一个取消。 我想要做的是当我单击取消时,我希望对我的 datagridView 所做的更改返回到其原始数据表。

到目前为止,当我点击按钮时,它只会删除所有行(保留列)。

这是我在代码中所做的一个例子:

public partial class UserControlMyDataGrid : UserControl
{
    private DataTable originalDataTable;

    public UserControlRechercheDataGrid()
    {
        InitializeComponent();

        originalDataTable = new DataTable();
        originalDataTable.Columns.Add("col A", typeof(int));
        originalDataTable.Columns.Add("col B");
        originalDataTable.Columns.Add("col C", typeof(bool));
        originalDataTable.Columns.Add("col D");

        for (int j = 0; j < 5; j++)
        {
            originalDataTable.Rows.Add(j, "c" + j.ToString(), true, "test");
        }

        dataGridView1.DataSource = originalDataTable;
    }

private void buttonCancelModifications_Click(object sender, EventArgs e)
    {
        originalDataTable.RejectChanges();
        dataGridView1.Refresh();
    }

}

有人知道它为什么会这样吗?

因为 RowState 都是 Added。您应该在最初填充数据 table 后调用 AcceptChanges 以使它们 Unmodified.

参见:https://msdn.microsoft.com/en-us/library/system.data.datarow.rowstate(v=vs.110).aspx