GetChanges()或RowState来获取数据表的所有更改?

时间:2012-08-06 14:49:14

标签: c# winforms

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

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

或者使用 RowState 来获取所有更改会更好吗?

2 个答案:

答案 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属性,告诉您该行是否已添加,删除或更新。

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