DataTable.GetChanges()保持返回NULL

时间:2009-11-09 17:18:30

标签: .net datatable

我正在尝试获取allData但不在removeData

中的所有行
public static DataTable RemoveDuplicateRows(DataTable allData, 
    DataTable removeData) 
{
    removeData.Merge(allData);
    DataTable newData = removeData.GetChanges(); 
    removeData.RejectChanges();
    return newData;
}
在这种情况下,

removeData在调用之前是空的(只是一个新的DataTable();)

newData

后,DataTable newData = removeData.GetChanges();的值始终为null

最终解决方案:

    public static DataTable RemoveDuplicateRows(DataTable allData, DataTable removeData) 
    {
        DataTable duplicate = allData.Clone();
        foreach (DataRow row in allData.Rows)
        {
            duplicate.ImportRow(row);
        }
        foreach (DataRow row in duplicate.Rows)
        {
            row.SetAdded();
        } 

        removeData.Merge(duplicate);
        DataTable newData = removeData.GetChanges(DataRowState.Added);
        removeData.RejectChanges();
        allData.RejectChanges();
        return newData;
    }

2 个答案:

答案 0 :(得分:1)

DataTable.GetChanges()方法取决于DataRow.RowState属性。对于一对DataTable中的每一行,DataTable.Merge()将保留其' RowState'财产,或将其重置为' Unchanged' (取决于您选择使用的过载)。 这意味着当您将两个DataTable与包含“未更改”的行合并时RowStates,合并的表格也将包含“未更改”字样。行和DataTable.GetChanges方法将返回null或Nothing。

答案 1 :(得分:0)

您的removeData DataTable需要与allData具有相同的列/字段。换句话说,它不能只是一个新的DataTable()。