C# DataRow.AcceptChanges赢得';我不能保持新的状态
这个测试代码非常简单C# DataRow.AcceptChanges赢得';我不能保持新的状态,c#,datatable,C#,Datatable,这个测试代码非常简单 var addedRows1 = (securityDataTable.GetChanges(DataRowState.Added)); MessageBox.Show(addedRows1.Rows[1].RowState.ToString()); MessageBox.Show(addedRows1.Rows.Count.ToString()); addedRows1.Rows[1].AcceptChanges(); var addedRows2 = (securi
var addedRows1 = (securityDataTable.GetChanges(DataRowState.Added));
MessageBox.Show(addedRows1.Rows[1].RowState.ToString());
MessageBox.Show(addedRows1.Rows.Count.ToString());
addedRows1.Rows[1].AcceptChanges();
var addedRows2 = (securityDataTable.GetChanges(DataRowState.Added));
MessageBox.Show(addedRows2.Rows[1].RowState.ToString());
MessageBox.Show(addedRows2.Rows.Count.ToString());
4消息框
按顺序显示以下消息:
Added
3
Added
3
我希望计数在最后一条消息中返回2。为什么不是这样,这可以通过任何方式解决?注意:DataTable未链接到表或特定数据源
编辑:请注意,如果第二次不重新查询GetChanges(),行状态是ok(设置为Unchanged)的。是否使用数据适配器填充数据表?MSDN建议在DataAdapter上调用AcceptChanges
private void UpdateDataTable(DataTable table,
OleDbDataAdapter myDataAdapter)
{
DataTable xDataTable = table.GetChanges();
// Check the DataTable for errors.
if (xDataTable.HasErrors)
{
// Insert code to resolve errors.
}
// After fixing errors, update the database with the DataAdapter
myDataAdapter.Update(xDataTable);
}
编辑
由于您仅使用datatable,因此可以为添加的行创建查询,并在该行上调用AcceptChanges:
DataRow[] addedRows = datatable.Select(null, null, DataViewRowState.Added);
foreach (DataRow _ddr in addedRows)
{
_ddr.AcceptChanges();
}