在我的数据表中,用户更改的最新行将被拒绝。我的代码总是以相同的顺序拒绝。如果用户先更改第一行,然后再更改第三行,则程序应首先拒绝第三行,但它拒绝第一行。您有什么主意,如何检测更改行的正确顺序?
public void UndoChanges()
{
foreach (DataRow dr in MyTable.Rows)
{
if (dr.RowState != DataRowState.Unchanged)
{
dr.RejectChanges();
return;
}
}
}
答案 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);
}
}