2009-06-02 7 views
0

私は、DataSourceにオブジェクトのリストを設定したDataGridViewを持っています。 (私はVS 2005でVBを使用しています。)DataGridViewを作成するには、AssetIdentifier型のデータソースを作成し、そのデータソースをフォームにドラッグします。バインドされたDataSourceが空になったときに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は、少なくとも一つの要素を持っていることを知っていました。私は、リストを更新し、そのリストにDataGridViewのデータソースをリセットし、すべてがうまくいきました。

これを他の状況に適用した場合、リストに少なくとも1つの要素があるとは限りませんでしたが、リストに少なくとも1つの要素がある限り正常に動作しますが、リスト空になった場合、DataGridViewはSystem.IndexOutOfRangeExceptionを何度も投げました。ゼロ以外の数の要素からゼロまで移動した場合、DataGridViewの行は消えません。

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

また、これらの例外を除いて、私はDataGridViewのセルを覆っていたときに同様の例外が発生します。

私はこの動作を数時間追跡してきました。どんな洞察?ありがとう!

必要に応じてさらに情報を追加してください。

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

答えて

0

コードをリファクタリングし、それが動作する...

+0

は、私は変更を追跡することができるかどうか、私が表示されます –

+0

...私は同じ問題を持っているので、あなたはそれを修正する方法を知って素晴らしいことです。 – John

関連する問題