DataGridView row is still dirty after committing changes
- by Ecyrb
DataGridView.IsCurrentRowDirty remains true after I commit changes to the database.  I want to set it to false so it doesn't trigger RowValidating when it loses focus.
I have a DataGridView bound to a BindingList<T>.  I handle the CellEndEdit event and save changes to the database.  After saving those changes I would like DataGridView.IsCurrentRowDirty to be set to true, since all cells in the row are up-to-date; however, it's set to false.  
This causes problems for me because when the row does lose focus it will trigger RowValidating, which I handle and validate all three cells in.  So even though all the cells are valid and none are dirty it will still validate them all.  That's a waste.
Here's an example of what I have:
void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    // Ignore cell if it's not dirty
    if (dataGridView.isCurrentCellDirty)
        return;
    // Validate current cell.
}
void dataGridView_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
    // Ignore Row if it's not dirty
    if (!dataGridView.IsCurrentRowDirty)  
        return;
    // Validate all cells in the current row.
}
void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    // Validate all cells in the current row and return if any are invalid.
    // If they are valid, save changes to the database
    // This is when I would expect dataGridView.IsCurrentRowDirty to be false.
    // When this row loses focus it will trigger RowValidating and validate all 
    // cells in this row, which we already did above.
}
I've read posts that said I could call the form's Validate() method, but that will cause RowValidating to fire, which is what I'm trying to avoid.
Any idea how I can set DataGridView.IsCurrentRowDirty to true?  Or maybe a way to prevent RowValidating from unnecessarily validating all the cells?