【问题标题】:DataGridView cell treats empty editable cell as a null, ignores DataGridViewCellStyle.NullValue propertyDataGridView 单元格将空的可编辑单元格视为 null,忽略 DataGridViewCellStyle.NullValue 属性
【发布时间】:2014-08-04 02:41:48
【问题描述】:

我有一个DataGridView,有 3 列,其中两列是用户可编辑的。

在访问单元格的值时遇到 NullRef 异常

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

这显然是因为我在使用该值之前没有检查 null。因此,我决定将初始化DataGridView 的对象更改为从不包含填充单元格的字符串属性的空值,而不是仅仅检查Nothing 值(我现在会这样做,永远不要害怕)。我只是改用String.Empty。

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

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

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

【问题讨论】:

    标签: c# .net vb.net datagridview


    【解决方案1】:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 2020-07-04
      • 1970-01-01
      • 2016-03-24
      相关资源
      最近更新 更多