将数据网格视图单元格强制转换为浮点型
本文关键字:转换 浮点型 单元格 数据 数据网 网格 视图 | 更新日期: 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。解析而不是浮点