4

我正在尝试将我的 datagridview 上选定行的列值添加到 Collection(但如果我使用 List 或 Array 执行此操作,则会出现相同的错误)

代码:

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)行,并给出错误:对象引用未设置为对象的实例

附加信息: 在 zdgv 上使用 QuickWatch 可为我提供所有信息。在它(zdgv)之后在行上使用它说:'Rows'未声明。由于其保护级别,它可能无法访问。

PS 是的,我用谷歌搜索过,但没有类似的问题。是的,我在这里搜索过,但没有信息。我也尝试过 r/visualbasic - 什么都没有……我什至尝试搜索与此错误相关的 c# 相关的东西 - 什么都没有。:/

提前致谢。

EDIT1:我尝试在新项目中制作非数据绑定数据网格视图,并将其中的一个值添加到集合中 - 同样的错误。我想我应该去谷歌搜索“将对象的引用设置为对象的实例”。

EDIT2:这个失败 - 新手错误。

EDIT3:使用快速手表

zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString 

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

4

4 回答 4

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
于 2013-08-16T18:21:15.057 回答
1

在代码顶部 - 就在公共类类名下面和第一个子上面我有这个:Public XXXXX As Collection

你不'创建一个实例collection然后你尝试向它添加一些项目。

它应该是:

Public XXXXX As New Collection

或者您需要在其他地方创建一个新实例才能访问它

XXXXX = New Collection

于 2013-08-16T18:22:26.023 回答
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

仅当子方法在其下抛出异常时,InnerException 才不是 null。

于 2013-08-16T17:45:57.320 回答
0

我找到的最佳解决方案 基本上,错误是您的代码正在使用不存在的行。

您只需将 datagridviewAllowUserToAddRows属性设置为 false。然后你所有的正常循环都会正常工作。

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

马克:)

于 2020-05-23T15:20:23.710 回答