I have a Form in my application that displays some data. When I first show the Form, I load some data into a DataTable then bind the DataTable to a DataGridView. I also start an
If you're using a BindingSource
for complex data binding, it's important to understand that SuspendBinding
and ResumeBinding
only suspend and resume binding for the current item. This lets you disable binding for the current item and change a bunch of its properties without any of the individual changes to the property being pushed out to the bound control. (This isn't explained in the documentation for the BindingSource
, where it would be useful, oh no: it's in the documentation for the CurrencyManager
.)
Any changes you make to the other items in the list, i.e. everything except the current item, raise the ListChanged
event. If you disable these events, the BindingSource stops telling the bound control about changes to the list until you re-enable them. This has the result you've seen: you add all of your rows to the underlying DataTable
, but since you've turned ListChanged
events off, the BindingSource
doesn't tell the DataGridView
about them, and so the DataGridView
remains empty.
The proper solution is to call ResetBindings
, which forces the BindingSource
to refresh all of the controls bound to it, using the current values in its bound list.
What sort of exceptions are you getting after you call ResetBindings
? Because it works just fine for me, whether I add, edit, delete, or remove rows from the underlying DataTable
.