У меня есть DataGridView, для которого я установил список объектов в DataSource. (Я работаю в 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
В этом случае я всегда знал, что в assetsIdList будет хотя бы один элемент. Я бы обновил список и сбросил источник данных DataGridView в этот список, и все было хорошо.
Когда я применил это к другой ситуации, для которой я не мог гарантировать, что в списке будет хотя бы один элемент, все будет работать нормально, пока у меня есть хотя бы один элемент в списке, но если список станет пустым, DataGridView несколько раз вызывал исключение System.IndexOutOfRangeException. Строки в DataGridView не исчезнут, если я перейду от ненулевого количества элементов к нулю.
Я попробовал обходной путь, который состоял в том, чтобы удалить все элементы, добавить один «фиктивный» элемент, а затем повторно привязать список к элементу управления, и это все равно не сработало.
Кроме того, следуя всем этим исключениям, я получаю другие подобные исключения, когда я зависаю над ячейками в DataGridView.
Я пытался отследить это поведение в течение нескольких часов. Любые идеи? Спасибо!
Будем рады добавить больше информации, если это необходимо.
ОБНОВЛЕНИЕ: некоторые члены AssetIdentifier были «Ничего», но я исправил это в конструкторе, и исключения все еще возникают.