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

M. *_*. X 5 c# winforms

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

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

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

ren*_*ene 9

对于行添加/删除检查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)


Ree*_*sey 2

DataRow生成的 DataTable 中的每个属性都会RowState设置其属性,该属性会告诉您该行是否已添加、删除或更新。

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