当绑定的DataSource变为空时如何处理更新DataGridView?

时间:2009-06-02 02:45:37

标签: vb.net list datagridview datasource

我有一个DataGridView,我已经为DataSource设置了一个对象列表。 (我在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至少有一个元素。我将更新列表,并将DataGridView的数据源重置为该列表,一切都很顺利。

当我将此应用于另一种情况时,我无法保证列表中至少有一个元素,只要列表中至少有一个元素,就可以正常工作,但如果列表变为为空,DataGridView多次抛出System.IndexOutOfRangeException。如果我从非零数量的元素变为零,DataGridView中的行不会消失。

我尝试了一种解决方法,即删除所有元素,添加一个“虚拟”元素,然后将列表重新绑定到控件,它仍然无效。

此外,在所有这些例外之后,当我在DataGridView中的单元格上盘旋时,我会得到其他类似的例外。

我一直试图追踪这种行为几个小时。任何见解?谢谢!

如果需要,很乐意添加更多信息。

UPDATE: AssetIdentifier的一些成员是“Nothing”,但我在构造函数中修复了它,但异常仍然发生。

1 个答案:

答案 0 :(得分:0)

重构代码,它有效...