【问题标题】:object cannot be cast from DB Null or other types对象不能从 DB Null 或其他类型转换
【发布时间】:2014-04-20 07:23:20
【问题描述】:

我的 Windows 应用程序中有一个 datagridview。我想在其中使用 datagridview 单元格(来自数量、价格、税金、折扣)值计算总金额并显示在总 gridview 单元格中。 但是我收到了这个错误。我也采用了可为空的类型。如何克服这个问题。 ? 这是我的 cellendit 事件代码

 private void datagrid_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            int val1 = Convert.ToInt32(datagrid.Rows[e.RowIndex].Cells[2].Value);
            int val2 = Convert.ToInt32(datagrid.Rows[e.RowIndex].Cells[3].Value);
            int val3 = Convert.ToInt32(datagrid.Rows[e.RowIndex].Cells[4].Value);
            int val4 = Convert.ToInt32(datagrid.Rows[e.RowIndex].Cells[5].Value);

                datagrid.Rows[e.RowIndex].Cells[6].Value = ((val2 + val3) * val1) - val4;

        } 

【问题讨论】:

  • 在将其转换为 Int32 之前,您需要检查每个单元格值是否为空
  • 在您的数据源中包含计算列也许是个好主意?

标签: c# winforms datagridview


【解决方案1】:

如果您的单元格之一是 DBNull.Value,您会遇到问题。通常我会检查一个单元格是否不等于 DBNull.Value,然后将其转换为 in。如果您的值实际上是一个真正的 null,那么我还假设将您的值设置为 0 就可以了。

int value1 = datagrid.Rows[e.RowIndex].Cells[2].Value == DBNull.Value ? 0 : Convert.ToInt32(datagrid.Rows[e.RowIndex].Cells[2].Value);

【讨论】:

    【解决方案2】:

    使用int.TryParse 方法代替Convert.ToInt

    【讨论】:

      猜你喜欢
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多