如何仅检测最新更改的数据行以拒绝更改?

时间:2019-07-05 09:17:50

标签: c# datatable

在我的数据表中,用户更改的最新行将被拒绝。我的代码总是以相同的顺序拒绝。如果用户先更改第一行,然后再更改第三行,则程序应首先拒绝第三行,但它拒绝第一行。您有什么主意,如何检测更改行的正确顺序?

   public void UndoChanges()
    {                    
        foreach (DataRow dr in MyTable.Rows)
        {                
            if (dr.RowState != DataRowState.Unchanged)                
            {
                dr.RejectChanges();
                return;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

这是我的最终解决方案:DataTable侦听RowChanged事件。我将修改后的行放入列表中。感谢jdweng和Tim Schmelter

    private DataTable dt;
    public List<DataRow> ModifiedRowsList { get; private set; }

    public myClass()
    {
        dt = new DataTable();
        dt.RowChanged += new DataRowChangeEventHandler(Row_Changed);
        ModifiedRowsList = new List<DataRow>();
    }

    public void UndoChanges()
    {
        if (ModifiedRowsList.Count > 0)
        {
            DataRow dr = dt.Rows[dt.Rows.IndexOf(ModifiedRowsList[ModifiedRowsList.Count - 1])];

            dr.RejectChanges();

            ModifiedRowsList.RemoveAt(ModifiedRowsList.Count - 1);
        }
    }

    private void Row_Changed(object sender, DataRowChangeEventArgs e)
    {
        if(e.Action != DataRowAction.Rollback)
        {
            ModifiedRowsList.Add(e.Row);
        }          
    }