【问题标题】:C# - System.InvalidCastException in DatagridviewC# - Datagridview 中的 System.InvalidCastException
【发布时间】:2015-05-06 09:22:59
【问题描述】:

我使用以下代码从 datagridview 中检索了一行(在 datagridview cellclick 事件中)

DataGridViewRow dtrow = gvUserFormStatus.Rows[e.RowIndex];

我尝试从 datagridviewrow 获取单元格值(第一个单元格)并使用以下代码转换为双精度

double x = (double)(dtrow.Cells[0].Value);

我遇到了错误 发生了“System.InvalidCastException”类型的未处理异常。

附加信息:指定的演员表无效

这里是编写gridview的代码

SqlDataAdapter mydataadapter = new SqlDataAdapter("select * from user_table", myconnection);
DataSet mydataset = new DataSet();
mydataadapter.Fill(mydataset);

DataTable dtUserFormStatus = mydataset.Tables[0];
gvUserFormStatus.DataSource = dtUserFormStatus;

在 sql 中,此特定字段的数据类型是 nvarchar(10)

谢谢

【问题讨论】:

  • 嗯,错误很明显,“Value”中的对象不是double,它是不能转换为double的东西。你在你的行里放什么?
  • 该单元格中的值为 10.000
  • 当然可以,但是类型是什么?这绝对不是双标。可能是一个字符串,或者别的什么?编辑您的问题并添加您在数据网格中输入值的方式。
  • 嗨 Gimly...我刚刚添加了代码...让我知道这已经足够或需要任何其他信息...谢谢

标签: c#


【解决方案1】:

我通常更喜欢FormattedValue

double x = double.Parse(dtrow.Cells[0].FormattedValue.ToString());

替代

double x = double.Parse(dtrow.Cells[0].Value.ToString());

【讨论】:

  • 谢谢...它工作....double.Parse(dtrow.Cells[0].Value.ToString()) 也在工作
【解决方案2】:

Cells[0] 中的 DataGridViewCell 对象将 Value 属性声明为 Object。您正在使用 () 运算符将对象显式转换为 double,这会引发异常,无论值如何。

这是你的情况:

  Object number = 123;
  double doubleNumber = (double)number; --> InvalidCastException

改为使用

Convert.ToDouble(Cells[0].Value)

【讨论】:

  • 好吧,不管值如何——如果该值是一个装箱的双精度值,则演员将成功...
  • Object number = 123.435; double doubleNumber = (double)number; 可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多