[英]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.