我试图将我的datagridview中选定行的列值添加到Collection(但如果我使用List或Array,我会得到相同的错误)
CODE:
Dim zdgv = MyDataGridView
For a = 0 To zdgv.SelectedRows.Count - 1
MsgBox(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
Try
MyCollection.Add(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
Catch ex As Exception
MsgBox(ex.Message)
MsgBox(ex.InnerException)
End Try
Next
ex.Message = 对象引用未设置为对象的实例
ex.InnerException = 为空
ex.InnerException.Message =使程序崩溃,转到代码屏幕, 突出显示 MsgBox(ex.InnerException)行,并给出错误: Object 引用未设置为对象的实例
附加信息: 在zdgv上使用QuickWatch为我提供了所有信息。在它之后的行上使用它(zdgv)说:'行'没有宣布。由于其保护级别,它可能无法访问。
P.S。是的,我用谷歌搜索,但没有问题是类似的。是的我在这里搜索但没有信息。我也尝试了r / visualbasic - 没什么...... 我甚至尝试用这个错误搜索c#相关的东西 - 没什么。 :/
提前致谢。
EDIT1:我尝试在新项目中创建非数据绑定datagridview,并从中添加一个值到集合 - 同样的错误。我想我应该去google关于"将对象的引用设置为对象的实例"。
EDIT2:这个失败了 - 新手的错误。
EDIT3:在
上使用quickwatchzdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString
它显示正确的值(正确的值,没有抛出错误)=" 1"。
答案 0 :(得分:3)
这段代码就像我身边的魅力一样。
您是否忘记了MyCollection的新内容?
Dim zdgv = MyDataGridView
Dim MyCollection As New Collection
For a = 0 To zdgv.SelectedRows.Count - 1
MsgBox(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
Try
MyCollection.Add(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
Catch ex As Exception
MsgBox(ex.Message)
If ex.InnerException IsNot Nothing Then
MsgBox(ex.InnerException)
End If
End Try
Next
答案 1 :(得分:1)
ex.InnerException为null,您尝试访问的是Message属性。这是正常的行为。 你应该尝试像
这样的东西 Try
MyCollection.Add(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
Catch ex As Exception
MsgBox(ex.Message)
If ex.InnerException IsNot Nothing Then
MsgBox(ex.InnerException)
End if
End Try
仅当sub方法在其下引发异常时,InnerException才为null。
答案 2 :(得分:1)
在代码顶部 - 正好在公共类classname之下和第一个sub之上 我是这样的:Public XXXXX As Collection
您没有'创建collection
的实例,然后尝试添加一些项目。
应该是:
Public XXXXX As New Collection
或者你需要在访问它之前在其他地方创建一个新实例
XXXXX = New Collection
答案 3 :(得分:0)
我找到的最佳解决方案 基本上,错误是您的代码正在使用不存在的行。
您只需要将datagridview AllowUserToAddRows
属性设置为假即可。然后,所有正常循环都将正常工作。
Dim zdgv = DataGridView1
For Each row As DataGridViewRow In zdgv.Rows
ListBox2.Items.Add(row.Cells(1).Value.ToString)
Next
或
For i as integer = 0 to datagridView1.rows.count - 2
'enter code here
Next
MK:)