我正在尝试获取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;
}
答案 0 :(得分:1)
DataTable.GetChanges()方法取决于DataRow.RowState属性。对于一对DataTable中的每一行,DataTable.Merge()将保留其' RowState'财产,或将其重置为' Unchanged' (取决于您选择使用的过载)。 这意味着当您将两个DataTable与包含“未更改”的行合并时RowStates,合并的表格也将包含“未更改”字样。行和DataTable.GetChanges方法将返回null或Nothing。
答案 1 :(得分:0)
您的removeData
DataTable需要与allData
具有相同的列/字段。换句话说,它不能只是一个新的DataTable()。