c# - 将 datagridview 单元格转换为 float

标签 c# datagridview

 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/

相关文章:

c# - 不使用 CPU 的多线程任务?

c# - 在 datagridview 单元格中显示长文本

c# - 如何在 datagridview 中存储每个用户/行的复选框数据,使其保持一致?

c# - 如何在 C# 中更改复选框值时计算 DataGridView 中选中的复选框?

c# - 无法对数据 GridView 进行排序

c# - 以编程方式选中 DataGridView 中的复选框

c# - DataGridView 单元格颜色更改

c# - 如何显示datagridview中的所有行?

c# - 我应该在哪里存储数据库连接字符串?

c# - 是否有模拟 facebook 的 "Link Detect"的库?