[VB.NET]对象引用未设置为对象的实例

时间:2013-08-16 17:43:06

标签: vb.net datagridview

我试图将我的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:

上使用quickwatch
zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString 

它显示正确的值(正确的值,没有抛出错误)=" 1"。

4 个答案:

答案 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:)