1

我有一个datagridview,它包含 5 行,列名是:XS、S、M、L 和 XL。

并且流程是首先用户将选择一个品牌(CHL和XRA),如果用户选择XRA,列名将重命名为-,1L,2L,3L,4L。

这里的问题是,每次我从列名重命名的单元格中获取值时,都会出现这种错误:对象引用未设置为对象的实例。

这是我从单元格中获取值的示例代码:

dvJOBranch.Rows(0).Cells.Item("M").Value.ToString

如果不重命名该列,则此代码可以正常工作,但如果我重命名该列,则会出现错误。

4

2 回答 2

1

如果列的索引没有改变,你可以通过它的索引而不是它的名字来访问它:

dvJOBranch.Rows(0).Cells.Item(2).Value.ToString 'third column

请注意,未将对象引用设置为对象的实例意味着您有NullReferenceException

上面的代码行假设:

  • dvJOBranch.Rows(0) 不是 null,否则访问Cell会抛出一个NullReferenceException
  • dvJOBranch.Rows(0).Cells.Item(2) 不是 null,否则访问Item(2).Value会抛出一个NullReferenceException
  • dvJOBranch.Rows(0).Cells.Item(2).Value 不是 null,否则.ToString()方法调用会抛出一个NullReferenceException

您需要进行适当的测试来处理空值。

If dvJOBranch.Rows(0).Cells.Item(2).Value IsNot Nothing Then
    (...)
End If

另请参阅什么是 NullReferenceException,以及如何修复它?

于 2013-09-01T23:47:08.180 回答
0

尝试以下操作:

If dvJOBranch.Rows(0).Cells.Item(2).Value IsNot Nothing OrElse String.IsNullOrEmpty(dvJOBranch.Rows(0).Cells.Item(2).Value.ToString)
(...)
End if

这里最重要的是 OrElse(而不是 OR),因为否则等式的第二部分仍然会给出 NullReferenceException。

于 2017-11-29T10:01:41.350 回答