如何处理异常"Specified cast is not valid"
How to handle an exception "Specified cast is not valid"
我用 Infragistics 制作了一个 UltraGrid,其中有一列格式为 HH:mm.
的 Datetime 类型
通常,该列填充的值如下:“15:13”。我可以编辑它并设置我想要的然后保存。但是如果我删除它看起来像这样的字段:“_ : _”然后我保存我的 table,我得到一个异常 "Specified cast is not valid".
这是因为我试图保存一个未设置的值。我想知道如何处理这个异常。
我试图将字段与 "null" 进行比较,但它不起作用。
var newDuration = (DateTime)row.GetCellValue(3);
if (newDuration == null)
{
MessageBox.Show("Please set all the fields.");
}
该列的dataType是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 非常有用,不需要任何其他东西,希望这对某人有帮助
我用 Infragistics 制作了一个 UltraGrid,其中有一列格式为 HH:mm.
的 Datetime 类型通常,该列填充的值如下:“15:13”。我可以编辑它并设置我想要的然后保存。但是如果我删除它看起来像这样的字段:“_ : _”然后我保存我的 table,我得到一个异常 "Specified cast is not valid".
这是因为我试图保存一个未设置的值。我想知道如何处理这个异常。
我试图将字段与 "null" 进行比较,但它不起作用。
var newDuration = (DateTime)row.GetCellValue(3);
if (newDuration == null)
{
MessageBox.Show("Please set all the fields.");
}
该列的dataType是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 非常有用,不需要任何其他东西,希望这对某人有帮助