【问题标题】:RejectChanges() on DataTable removes all rows in DataGridViewDataTable 上的 RejectChanges() 删除 DataGridView 中的所有行
【发布时间】:2016-11-28 18:04:26
【问题描述】:

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

我有一个具有自定义 dataGridView 的表单。 这个 datagridView 接受一个数据源。 数据源是我自己创建的数据表(稍后将被数据库数据表替换)。 到目前为止一切正常。

现在我的表单中有 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();
    }

}

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

【问题讨论】:

    标签: c# forms datagridview datatable datasource


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢。我已经阅读了 MSDN 文档并检查了 rowstate,但对于 dattable.RejectChanges() 它只讨论了修改和删除的状态,而不是添加的状态。在任何情况下。再次感谢。这澄清了很多。小问题。如果我想保存它,我只需要这样做。只需接受更改,然后按我认为合适的方式导出数据表?
    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多