C# “如何处理异常”;指定的强制转换无效";
我用Infragistics制作了一个超级网格,其中有一列Datetime类型,格式为HH:mm 通常情况下,该列会填充类似“15:13”的值。我可以编辑它,设置我想要的,然后保存。但是如果我删除字段,它看起来是这样的:“:uu”,然后我保存我的表,我得到一个异常“指定的强制转换无效” 这是因为我试图保存一个未设置的值。我想知道如何处理这个异常 我试图将fiel与“null”进行比较,但它不起作用C# “如何处理异常”;指定的强制转换无效";,c#,.net,infragistics,C#,.net,Infragistics,我用Infragistics制作了一个超级网格,其中有一列Datetime类型,格式为HH:mm 通常情况下,该列会填充类似“15:13”的值。我可以编辑它,设置我想要的,然后保存。但是如果我删除字段,它看起来是这样的:“:uu”,然后我保存我的表,我得到一个异常“指定的强制转换无效” 这是因为我试图保存一个未设置的值。我想知道如何处理这个异常 我试图将fiel与“null”进行比较,但它不起作用 var newDuration = (DateTime)row.GetCellValue(3);
var newDuration = (DateTime)row.GetCellValue(3);
if (newDuration == null)
{
MessageBox.Show("Please set all the fields.");
}
列的数据类型是System.DateTime,我将默认值设置为DB(DBNull),AllowDBNull是默认值
有两种方法可以解决此问题:
- 向用户显示一条消息,要求用户设置一个值
- 如果该字段为空,请将默认值设置为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非常有用,不需要其他任何东西,希望这对某人有帮助使用Datetime.tryparseRow.GetCellValue(3).GetType()显示什么?如果它是可为空的字段,请尝试使用可为空的Datetime类型。var newDuration=(DateTime?)row.GetCellValue(3);首先检查null。@Jon Skeet它显示“{03/01/2015 00:00:00}我非常非常怀疑
row.GetCellValue(3).GetType()
显示了这一点。我打赌money的大多数行都是DateTime
,但其中一些行是DbNull.Value
,这就是它失败的值。@ScottChamberlain你赔钱了,我只有两列DateTime,类型是System.DateTime。但是默认值是DbNull,这有关系吗?是的,有关系。你知道吗如果有些行是空的,那么这些行不会显示为null
,而是显示为DbNull.Value
@Sinatr是的,检查类型可能是一个好方法。但这是我要测试的值。我是C#…:/@ScottChamberlain的新手,我会按日期时间更改它,并设置一个默认值,如“01/01/2015 00:00:00”“好的。但是,当我让我的字段为空并尝试保存它时,不会将空字段更改为默认字段。并返回一个异常。非常糟糕的选择。让异常驱动代码将导致明显的性能损失,特别是在需要检查多行的情况下