.Net DataGridView "Индекс 0 не имеет значения." - PullRequest
4 голосов
/ 27 октября 2009

У меня проблемы с DataGridView. У меня есть коллекция из 3 элементов, привязанных к сетке, при попытке удалить один из элементов и перезагрузить сетку.

Если есть код

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

В открывшемся диалоговом окне я удаляю элемент из сетки (который, в свою очередь, должен удалить элемент из коллекции и повторно загружать сетку), и он возвращается к «If (dlg.show ...»). строка с ошибкой

"Первое случайное исключение типа 'System.IndexOutOfRangeException' произошло в System.Windows.Forms.dll

Дополнительная информация: Индекс 2 не имеет значения. "

(У меня настроен отладчик для общих ошибок времени выполнения языка)

Я могу понять эту ошибку, если бы я пытался получить доступ к любым ячейкам, строкам или столбцам, но я не, и тогда я ожидал бы, что исключение остановится на строке кода, которая пытается получить доступ к этим данным сетки, а не Строка «If (dlg.ShowDialog () ...»

Есть идеи? Приветствия

Ответы [ 3 ]

8 голосов
/ 27 октября 2009

Я обнаружил, что если вы добавите в

DataGridView.DataSource = Nothing
DataGridView.Refresh()

до сброса сетки в коллекцию (с удаленным удаленным элементом)

DataGridView.DataSource = MyCollection

Это работает как шарм. Все еще интересует, почему вы должны это делать.

0 голосов
/ 23 октября 2018

Это похоже на ошибку .Net, я создал тестовую программу, но она все еще не работает, но я нашел обходной путь, добавив проверку Null и количество элементов перед привязкой источника данных:

If MyCollection IsNot Nothing AndAlso MyCollection.Count > 0 Then
    DataGridView.DataSource = MyCollection
End If
0 голосов
/ 27 октября 2009

Возможно, что, так как вы показываете модальное диалоговое окно, там отображается ошибка, которая выдается. Вы пытались установить точку останова в строке кода, которая на самом деле выполняет удаление из сетки / коллекции, чтобы увидеть, происходит ли ошибка из-за этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...