After looking into the problem at some length, MSDN actually seems to offer the best solution right on their Cell Content Click event page. I like that it tells us very specifically what has happened to the grid at the point in time when the event is raised and handled.It’s important to note that this event will get called twice, once on changing the state of the cell to dirty (before committing changes) and once when changing the cell state back to ‘clean’ (after the changes have been committed).NET, but, not to fear, there are several easy work-arounds that will get the trick done.
Gets a value indicating whether the caller must call an invoke method when making method calls to the control because the caller is on a different thread than the one the control was created on.(Inherited from Control.)Adjusts the height of the column headers based on changes to the contents of the header in the specified column, optionally calculating the height with the expectation that the column and/or row header widths will subsequently be adjusted.
Adjusts the width of the row headers based on changes to the contents of the header in the specified row and using the specified size mode, optionally calculating the width with the expectation that the row and/or column header widths will subsequently be adjusted.
Optionally, invalidates the child controls assigned to the control.(Inherited from Control.) This API supports the product infrastructure and is not intended to be used directly from your code.
Raises the Invalidated event with a specified region of the control to invalidate.(Inherited from Control.) to a data source and automatically populate it with data.
This problem was also raised in a Stack Overflow Question which seemed to advocate for handling the method, thereby ensuring that the grid would evaluate whether or not the Cell’s value had, indeed, changed and fire the corresponding event appropriately I must admit, this works, but feels like more of a work around than a solution.
What if someone is able to make a selection without a click event?
Still, it doesn’t make much sense when we think about the way Check Box’s work, in that, they can only ever be On or Off, and that once you have made your selection, you’re probably pretty confident that you want to change the value.
Any solution is going to involve using an event that definitely will fire to stop the Data Grid View from thinking it’s in edit mode.
The Cell Validating event handler can clear the error text when the new cell value meets the validation criteria, but when the user reverts to the old cell value by pressing ESC, the Cell Validating event does not occur.