将数据网格视图单元格强制转换为浮点型

本文关键字:转换 浮点型 单元格 数据 数据网 网格 视图 | 更新日期: 2023-09-27 17:56:26

 for (int i = 0; i < dgv.RowCount; i++)
 {
      pin.Size = (float)(dgv.Rows[i].Cells[2].Value);
 }

我有一个"Size"的类属性,它是一个浮点数。 用户可以输入整数或十进制值。 它作为真实存储在数据库(SQL)中。 该值应保留为浮点数。 当用户在第 3 列(单元格 [2])中输入值并单击保存时。

指定的强制转换无效

但是,我认为在上面做我的代码应该为单元格处理这个问题。 允许浮点值进入网格单元的其他选项是什么?

将数据网格视图单元格强制转换为浮点型

这不起作用有几个原因。 可能是因为该值是 null ,它可能是字符串值,也可能是另一个没有显式强制转换的对象类型float。 由于浮点数是一个原始值,而不是一个对象,它永远不会为空,因此潜在的错误。 字符串也需要被解析为数字原语,例如浮点数,因为直接强制转换会抛出错误

最好的办法是执行以下操作:

 for (int i = 0; i < dgv.RowCount; i++)
 {
      float value;
      if(Float.TryParse(dgv.Rows[i].Cells[2].Value, out value)
          pin.Size = value;
      else
          pin.Size = 0 //or whatever default value you'd like to use when not parsable to float,
 }

如果您知道是否始终知道它是有效的float或 null 值,则可以使用另一个潜在的解决方案。

pin.size = (float)(dvg.Rows[i].Cells[2].Value ?? 0)

??运算符称为 null 合并运算符,允许您在null时指示备用值。

我仍然会确保通过调试器运行它,以确保该值是您希望的类型。 尽管您可能会看到该值为 0.0,但该类型不一定是您所期望的。

for (int i = 0; i < dgv.RowCount; i++) {
 pin.Size = float.parse(dgv.Rows[i].Cells[2].Value.toString()); }

但必须重视DGV。行[i].细胞[2]。值为数字或字符串

使用float。解析而不是浮点