在 Winforms 应用程序中,我必须记录datagrid(datatable)中的所有更改。换句话说,我想要获得所有更改,因为它已被加载。为此,我想使用 Datatable.GetChanges()。我知道,使用 GetChanges(),我得到一个数据表,其中包含原始DataSet中具有挂起更改的所有行的副本。
现在我的问题是,如果还可以获得更多更改的其他信息。例如,我想知道行是添加还是已删除还是仅已更新。如果一行已更新,我还想知道哪些单元格已更新?有没有办法快速获取所有这些信息,或者我必须使用原始数据表逐行进行深度比较?
或者使用 RowState 来获取所有更改会更好吗?
答案 0 :(得分:8)
对于行添加/删除检查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
}
}
答案 1 :(得分:2)
生成的DataTable中的每个DataRow
都会设置RowState
属性,告诉您该行是否已添加,删除或更新。
我不相信单个单元提供更新信息,但是它只能按行跟踪。