Υπάρχουν περιπτώσεις που η μέθοδος HasChanges του DataSet δεν λειτουργεί σωστά.
Δηλαδή επιστρέφει πάντα true, παρότι δεν έχουν γίνει αλλαγές στο DataSet.
public static class DataSetUtils
{
/// <summary>
/// Gets a value indicating whether the DataSet has changes, including new, deleted, or modified rows.
/// </summary>
/// <param name="dataSet"></param>
/// <returns>true if the DataSet has changes; otherwise false.</returns>
public static bool HasChanges(DataSet dataSet) {
if (dataSet == null) return false;
for (int table = 0; table < dataSet.Tables.Count; table++) {
for (int row = 0; row < dataSet.Tables[table].Rows.Count; row++) {
for (int col = 0; col < dataSet.Tables[table].Columns.Count; col++) {
if (dataSet.Tables[table].Columns[col].ColumnName == "ModifiedDate") continue;
if (dataSet.Tables[table].Columns[col].ColumnName == "ModifiedUser") continue;
if (dataSet.Tables[table].Rows[row].RowState == DataRowState.Added) return true;
if (dataSet.Tables[table].Rows[row].RowState == DataRowState.Deleted) return true;
if (!dataSet.Tables[table].Rows[row][col, DataRowVersion.Original].Equals(dataSet.Tables[table].Rows[row][col, DataRowVersion.Current])) return true;
}
}
}
return false;
}
}