У меня есть DataGridView, для которого я установил список объектов для источника данных. (Я нахожусь в VS 2005 с использованием VB.) Я создал DataGridView, создав Источник данных типа AssetIdentifier и перетащив этот Источник данных в мою форму.
Я хочу обновить DataGridView при изменении выбора в поле со списком или другом DataGridView. (Ниже я рассматриваю щелчок в другом DataGridView.) Работает следующее:
Public Class dlgShowAssets
' class member variable
Private assetIdList As List(Of AssetIdentifier)
' pertinent subs and functions
Private Sub RefreshAssetIdentifierDataGridView()
AssetIdentifierDataGridView.DataSource = assetIdList
End Sub
Private Sub AssetDataGridView_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles AssetDataGridView.CellClick
assetIdList = RepopulateTheList(id)
Me.RefreshAssetIdentifierDataGridView()
End Sub
End Class
В этом случае я всегда знал, что в assetIdList будет хотя бы один элемент. Я обновлял список и сбрасывал источник данных DataGridView в этот список, и все было хорошо.
Когда я применил это к другой ситуации, для которой я не мог гарантировать, что в списке будет хотя бы один элемент, все будет работать нормально, пока у меня есть хотя бы один элемент в списке, но если список стал пустой, DataGridView вызывал System.IndexOutOfRangeException несколько раз. Строки в DataGridView не исчезли бы, если бы я перешел с ненулевого числа элементов на ноль.
Я попробовал обходной путь, который заключался в том, чтобы удалить все элементы, добавить один «фиктивный» элемент, а затем повторно привязать список к элементу управления, и он все еще не работал.
Кроме того, после всех этих исключений я получал другие подобные исключения, когда зависал над ячейками в DataGridView.
Я пытался отследить это поведение в течение нескольких часов. Есть идеи? Спасибо!
Будем рады добавить дополнительную информацию, если это необходимо.
ОБНОВЛЕНИЕ: Некоторые члены AssetIdentifier были «Ничего», но я исправил это в конструкторе, и исключения по-прежнему возникают.