[英]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。
有两种方法可以解决此问题:
问我是否需要更多信息。 谢谢 !
在不确定的情况下尝试获取所需类型值的典型模式是
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.