オブジェクトのリストを 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」でしたが、コンストラクターで修正しましたが、例外は引き続き発生します。