簡體   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