Как обрабатывать обновление DataGridView, когда связанный источник данных становится пустым?

У меня есть 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 были «Ничего», но я исправил это в конструкторе, и исключения все еще возникают.


person John    schedule 02.06.2009    source источник


Ответы (1)


Отрефакторил код, и он работает...

person John    schedule 08.09.2009
comment
Я посмотрю, смогу ли я отследить изменения. - person John; 27.01.2010