在Winforms应用程序中,我必须记录datagrid(datatable)中的所有更改.换句话说,我想要获得所有更改,因为它已被加载.为此,我想使用Datatable.GetChanges().我知道,使用GetChanges(),我得到一个数据表,其中包含原始DataSet中具有挂起更改的所有行的副本.
我现在的问题是,如果还可以获得更多的更改信息.例如,我想知道,如果一个行已添加或删除或仅已更新.如果一行已更新,我还想知道哪些单元格已更新?有没有办法快速获取所有这些信息,还是我必须逐行与原始数据表进行深度比较?
或者使用RowState来获取所有更改会更好吗?
对于行添加/删除检查RowState
对于行中的每个项目(也称为单元格),请检查DataRowVersion
foreach (DataRow dr in dt.Rows)
{
if (dr.RowState == DataRowState.Modified)
{
var changedCols = new List<DataColumn>();
foreach (DataColumn dc in dt.Columns)
{
if (!dr[dc, DataRowVersion.Original].Equals(
dr[dc, DataRowVersion.Current])) /* skipped Proposed as indicated by a commenter */
{
changedCols.Add(dc);
}
}
// now handle the changedCols list
}
}
Run Code Online (Sandbox Code Playgroud)