我有一个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”,但我在构造函数中修复了它,但异常仍然发生。
答案 0 :(得分:0)
重构代码,它有效...