Как обрабатывать обновление DataGridView, когда связанный DataSource становится пустым? - PullRequest
0 голосов
/ 02 июня 2009

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

1 Ответ

0 голосов
/ 09 сентября 2009

Рефакторинг кода и он работает ...

...