2014-06-13 85 views
1

我有一个DataGridView,有3列,其中两列是用户可编辑的。DataGridView单元将空的可编辑单元视为null,忽略DataGridViewCellStyle.NullValue属性

访问单元格的值这样

someObject.Property = dgv.Rows(x).Cells(y).Value.ToString() 

这显然是因为我不是为空使用值前检查时,我得到一个NullRef例外。因此,我决定将初始化DataGridView的对象更改为永不包含填充单元格的字符串属性的null值的对象,而不仅仅是检查Nothing值(我现在要做的,绝不会担心)。我只是用String.Empty代替。

我以为一切都会好起来的,但似乎当我编辑单元格并将其留空时,它将它视为空值而不是String.Empty。我已经处理了CellBeginEdit,CellEndEditCellLeave事件,试图找到它从哪里获得这个神奇的空值,但无济于事。

我看到the DataGridViewCellStyle.NullValue property on the MSDN,我认为这将是答案,但事实证明,NullValue属性默认为String.Empty,因此没有多大意义。

显然这里的简单答案是“在使用之前检查null”,但为什么我不能强制它将空字符串视为空字符串而不是空值?

回答

0

datagrid单元格值是对象,空字符串是null。

你可以将它转换为一个字符串,然后检查string.empty,但它并不遥远,只是检查它是什么。

dim _value as string = dgv.Rows(x).Cells(y).Value 
someObject.Property = _value 

或者写一个函数来检查

Public Function checkForNull(_value as object) as string 

If _value is nothing then return string.empty else return _value.tostring() 

End Function 

....

SomeObject.Property = checkForNull(dgv.Rows(x).Cells(y).Value)