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

本文关键字:DataGridView 删除 RejectChanges 上的 DataTable | 更新日期: 2023-09-27 17:58:39

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

我有一个表单,它有一个自定义的dataGridView。此datagridView接收一个数据源。DataSource是我自己创建的Datatable(稍后将被数据库Datatable取代)。到目前为止一切都很好。

现在我的表单中有两个按钮。一个保存,一个取消。我想做的是,当我点击cancell时,我希望对我的datagridView所做的更改返回到它的原始dataTable。

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

以下是我在代码中所做操作的示例:

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();
    }
}

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

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

这是因为所有的RowState都是Added。在最初填充数据表使其成为Unmodified之后,应该调用AcceptChanges

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