Comment faire pour déterminer si DataGridView contient des modifications non validées quand il est lié à un SqlDataAdapter

J'ai un formulaire qui contient un DataGridView, un BindingSource, un DataTable, et un SqlDataAdapter. - Je remplir la grille et les liaisons de données comme suit:

private BindingSource bindingSource = new BindingSource();
private DataTable table = new DataTable();
private SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT * FROM table ORDER BY id ASC;", ClassSql.SqlConn());
private void LoadData()
{
    table.Clear();
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.DataSource = bindingSource;
    SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
    table.Locale = System.Globalization.CultureInfo.InvariantCulture;
    dataAdapter.Fill(table);
    bindingSource.DataSource = table;
}

L'utilisateur peut alors apporter des modifications aux données, et de commettre ces changements ou de les annuler en cliquant sur enregistrer ou le bouton annuler, respectivement.

private void btnSave_Click(object sender, EventArgs e)
{
    //save everything to the displays table
    dataAdapter.Update(table);
}

private void btnCancel_Click(object sender, EventArgs e)
{
    //alert user if unsaved changes, otherwise close form
}

Je voudrais ajouter une boîte de dialogue si vous cliquez sur annuler, qui prévient l'utilisateur des modifications non enregistrées, si des modifications non enregistrées existent.

Question:

Comment puis-je déterminer si l'utilisateur a modifié des données dans le DataGridView mais pas validée dans la base de données? Est-il un moyen facile de comparer l'état actuel de DataGridView données par le dernier extrait de la requête? (Notez qu'il n'y aurait pas d'autres threads ou les utilisateurs de modifier les données dans SQL en même temps.)

OriginalL'auteur JYelton | 2010-05-11