for (int i = 0; i < dgv.RowCount; i++)
{
pin.Size = (float)(dgv.Rows[i].Cells[2].Value);
}
我有一个类属性“Size”,它是一个 float 。用户可以输入整数或小数值。它作为真实的存储在数据库(SQL)中。该值应该保持为 float 。当用户在第 3 列 (Cells[2]) 中输入一个值,并单击保存....
Specified cast is not valid
但是,我认为执行上面的代码应该可以处理该单元格。允许网格单元有浮点值的其他选项是什么?
最佳答案
这不起作用的原因有几个。这可能是因为该值为 null
,它可能是一个字符串值,或者它可能是另一个没有显式转换为 float
的对象类型。由于 float 是原始值,与对象相反,它永远不会为 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,但类型不一定是您所期望的。
关于c# - 将 datagridview 单元格转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30870164/