7

Winforms应用程序中,我必须记录 datagrid (datatable) 中的所有更改。换句话说,我想获得所有更改,因为它已被加载。为此,我想使用Datatable.GetChanges()。我知道,使用GetChanges()我得到一个数据表,其中包含原始 DataSet 中所有行的副本,这些行有待处理的更改。

我现在的问题是,是否也有可能获得有关更改的更多附加信息。例如,我想知道一行是否已添加删除或仅已更新。如果一行已更新,我还想知道哪些单元格已更新?有没有办法快速获取所有这些信息,还是我必须逐行与原始数据表进行深度比较

还是使用RowState来获取所有更改更好?

4

2 回答 2

11

对于行添加/删除检查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
            }
        }
于 2012-08-06T15:10:13.387 回答
2

生成的 DataTable 中的每个DataRow都有其RowState属性集,它告诉您该行是否被添加、删除或更新。

但是,我不相信单个单元格提供更新信息 - 它仅按行跟踪。

于 2012-08-06T14:54:44.420 回答