繁体   English   中英

如何处理异常“指定的强制转换无效”

[英]How to handle an exception "Specified cast is not valid"

我用 Infragistics 制作了一个 UltraGrid,其中有一列日期时间类型的格式为 HH:mm。

通常,该列会填充一个值,例如:“15:13”。 我可以编辑它并设置我想要的然后保存。 但是如果我删除它看起来像这样的字段:“_ _”然后我保存我的表,我会得到一个异常“指定的强制转换无效”。

这是因为我试图保存一个未设置的值。 我想知道如何处理这个异常。

我试图将字段与“空”进行比较,但它不起作用。

var newDuration = (DateTime)row.GetCellValue(3);
if (newDuration == null)
{
      MessageBox.Show("Please set all the fields.");
}

该列的数据类型为 System.DateTime,我将默认值设置为 DB (DBNull),AllowDBNull 为 Default。

有两种方法可以解决此问题:

  • 向用户显示一条消息,要求他设置一个值
  • 如果该字段为空,则设置一个默认值,如 00:00

问我是否需要更多信息。 谢谢 !

在不确定的情况下尝试获取所需类型值的典型模式是

var value = someOtherValue as SomeType;
if (value != null)
{
    ... // value is a correct SomeType here
}

这适用于引用类型。 如果是值类型的结构( DateTime是一个结构),则必须先检查类型

var value = row.GetCellValue(3);
if(value is DateTime)
{
    var dateTime = (DateTime)value;
    ... // dateTime is a valid DateTime here
}

我的回答并没有解释你为什么会遇到这个问题,而是展示了如何避免它(这可能不是一个好主意,但似乎你想要那个)。

如果您的值可以是DBNull ,那么只需检查它:

var value = row.GetCellValue(3);
if(value != DBNull.Value)
{
    var dateTime = (DateTime)value; // it must work now
    ...
}

其实我是这样做的:

try
{
       newDuration = (DateTime)row.GetCellValue(3);
}
catch
{
       row.SetCellValue(3, new DateTime());
       newDuration = (DateTime)row.GetCellValue(3);
}

它有效......感谢大家的帮助,我会在我未来的开发中使用你所说的!

在 wingrid 有一个特定的事件来处理这个错误,它的 datacellerror 非常有用,不需要其他任何东西,希望这对某人有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM