0

オブジェクトのリストを DataSource に設定した DataGridView があります。(私は VS 2005 で VB を使用しています。) AssetIdentifier タイプのデータ ソースを作成し、そのデータ ソースをフォームにドラッグして、DataGridView を作成しました。

コンボ ボックスまたは別の 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 に少なくとも 1 つの要素があることは常にわかっていました。リストを更新し、DataGridView のデータ ソースをそのリストにリセットすると、すべてうまくいきました。

これを別の状況に適用すると、リストに少なくとも 1 つの要素があることを保証できませんでしたが、リストに少なくとも 1 つの要素があれば問題なく動作しますが、リストが空になると、 DataGridView が System.IndexOutOfRangeException を何度もスローしました。ゼロ以外の要素数からゼロになった場合、DataGridView の行は消えません。

すべての要素を削除し、「ダミー」要素を 1 つ追加してから、リストをコントロールに再バインドするという回避策を試みましたが、それでも機能しませんでした。

また、これらすべての例外に続いて、DataGridView のセルにカーソルを合わせると、他の同様の例外が発生します。

私はこの行動を数時間追跡しようとしています。洞察はありますか?ありがとう!

必要に応じてさらに情報を追加します。

更新: AssetIdentifier のメンバーの一部は「Nothing」でしたが、コンストラクターで修正しましたが、例外は引き続き発生します。

4

1 に答える 1

0

リファクタリングされたコードとそれは機能します...

于 2009-09-08T23:36:53.280 に答える