views:

701

answers:

2

I am having trouble with a DataGridView. I have a collection of 3 Items bound to the grid, when trying to delete one of the items and reload the grid.

If have code of

If (dlg.ShowDialog() = DialogResult.OK) Then
     'Show dialog with grid on it
End If

On the opened dialog, I delete an item from the grid (which should in turn, delete the item from the collection, and re-load the grid), and it returns to the "If (dlg.show..." line, with the error of

"A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Windows.Forms.dll

Additional information: Index 2 does not have a value. "

(I have break into debugger set on for common language runtime errors)

I can understand this error if i were trying to access any cells, row or columns, but im not, and then I would expect the exception to stop on the line of code that is trying to access this grid data, not the "If (dlg.ShowDialog()... " line

Any ideas? Cheers

A: 

It is possible that since you are showing a modal dialog, the error that is thrown is shown there. Have you tried to set a break point in the line of code that actually does the deleting from the grid/collection to see if the error is coming from that?

Chu
Ive set a breakpoint and gone thru the deleting methods, it goes through the removing the item from the collection and re-binding the datasource on the grid without a problem. the point where the error throws is on the "End Sub" of the method that handles the menu item click event (ctxMenuDelete.Click), from here it returns to the "If (dlg.ShowDialog()..." on the parent form.
Ben
+3  A: 

I have discovered that if you add in

DataGridView.DataSource = Nothing
DataGridView.Refresh()

before resetting the grid to the collection (with the deleted item removed)

DataGridView.DataSource = MyCollection

It works like a charm. Still interested as to why you have to do this.

Ben