【问题标题】:Operator '+' is not defined for type 'integer' and type 'dbnull'未为类型“整数”和类型“dbnull”定义运算符“+”
【发布时间】:2018-07-20 10:43:59
【问题描述】:

我正在尝试计算数据网格视图的总列、Oracle 中的数字数据类型、具有空值的数据网格视图列.....

Dim X As Integer
Dim y As Integer
For line As Integer = 0 To dgvAccDetail.RowCount - 1

    X = X + dgvAccDetail.Rows(line).Cells(4).Value

    y = y + dgvAccDetail.Rows(line).Cells(5).Value

Next
TXTVoucherDTotal.Text = X
txtvoucherCtotal.Text = y

但得到消息:

没有为“integer”类型和“dbnull”类型定义运算符“+”

.....请告诉我这段代码有什么问题。

【问题讨论】:

  • 对于从数据库返回为 NULL 的项目,您希望发生什么?也许需要调整 SQL 查询以不选择具有 NULL 的行。
  • 检查 dgvAccDetail.Rows(line).Cells(4).Value 或 dgvAccDetail.Rows(line).Cells(5).Value 是否等于 dbNull
  • 数据网格视图有两列借方和贷方,...我只需要平铺这两列的总和,我为什么要这样做
  • @EjazSarwar 其中之一(或两者)为 NULL。你想用 NULL 做什么?是否应该视为0,还是表示该行无效,所以另一列也不应该使用?
  • 我希望我的代码将空值(空单元格)视为 0,

标签: vb.net datagridview operators nul custom-data-type


【解决方案1】:

这假设您将“DBNull”视为 0:

Dim X As Integer
Dim y As Integer
For line As Integer = 0 To dgvAccDetail.RowCount - 1

    X = X + If(IsDBNull(dgvAccDetail.Rows(line).Cells(4).Value),0,dgvAccDetail.Rows(line).Cells(4).Value)

    y = y + If(IsDBNull(dgvAccDetail.Rows(line).Cells(5).Value),0,dgvAccDetail.Rows(line).Cells(5).Value)

Next
TXTVoucherDTotal.Text = X.tostring
txtvoucherCtotal.Text = y.tostring

编辑:为避免在单元格中的值不是整数(而是将其计为 0)的情况下引发异常 - 正如 cmets 中的 Ctznkane525 所指出的那样。

    Dim X As Integer = 0
    Dim y As Integer = 0
    For line As Integer = 0 To dgvAccDetail.RowCount - 1

        If dgvAccDetail.Rows(line).Cells.Count >= 5 AndAlso TypeOf dgvAccDetail.Rows(line).Cells(4).Value Is Integer Then
            X = X + DirectCast(dgvAccDetail.Rows(line).Cells(4).Value, Integer)
        End If

        If dgvAccDetail.Rows(line).Cells.Count >= 6 AndAlso TypeOf dgvAccDetail.Rows(line).Cells(5).Value Is Integer Then
            y = y + DirectCast(dgvAccDetail.Rows(line).Cells(5).Value, Integer)
        End If

    Next

    TXTVoucherDTotal.Text = X.ToString
    txtvoucherCtotal.Text = y.ToString

【讨论】:

  • 这里的类型转换问题?
  • @Ctznkane525 啊。哎呀。谢谢,好地方。实际上,当我快速徒手打字时,我实际上并没有严格打开或关闭选项,但我仍然应该想到这一点。我很抱歉。当我下次使用电脑时,我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 2014-04-27
  • 2014-09-08
相关资源
最近更新 更多