Μια νέα «HasChanges»

Υπάρχουν περιπτώσεις που η μέθοδος 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;
   }
}