2014-12-05 157 views
-1

我試圖運行一個存儲過程,需要一個int才能正常工作。我從數據網格中抽取「ID」,然後嘗試解析int以允許該過程運行,但是在標題中提到了錯誤。有沒有更好的方法來做到這一點?解析字符串:輸入字符串格式不正確。 #

<asp:BoundColumn DataField="ID" Visible="true"></asp:BoundColumn> 

<asp:Button ID="btnMarkComplete" Text="Mark Complete" runat="server" CommandArgument='<$# Eval("ID") %>' OnClick="BtnMarkCompleteClick"/> 
         </ItemTemplate> 


int iD = Convert.ToInt32(d.CommandArgument.ToString()); 
+2

您試圖轉換的值是什麼? – 2014-12-05 15:31:33

+1

你的字符串格式不正確,這意味着,如果像'abcde'這樣的東西不能被解釋爲int。 – mihai 2014-12-05 15:31:55

+0

你有沒有放置一個斷點,並嘗試看看你在「d.CommandArgument」中獲得了什麼值? – 2014-12-05 15:31:59

回答

2

在回答你的問題時,「有沒有更好的方法來做到這一點」?

是的,這就是所謂的TryParse

int iD = 0; 

if(Int32.TryParse(d.CommandArgument.ToString(), out iD)) 
{ 
    // Do something with iD 
} 

說明

你暗示(使用基本Convert方法),輸入可以轉換爲Int32,這是爲什麼你不能得到例外。按照我上面提出的方式,你只是試圖解析它。 TryParse返回boolean然後您可以評估以決定執行路徑。

+0

謝謝,這原來是一個修復它。 – 2014-12-05 15:40:11

+0

嗯,這將確保有一個檢查 - 但它不會影響你通過它的輸入(即轉換仍然沒有發生)。請注意這一點。 – 2014-12-05 15:51:17

2

有一個錯字那裏開始:

<$# Eval("ID") %> 

應該

<%# Eval("ID") %> 

所以,你正試圖將字符串值<$# Eval("ID") %>轉換爲整數,這將失敗並引發您收到錯誤。由於輸入錯誤,該字段不會綁定到ID。