2013-02-26 121 views
0

我想在gridview中添加int值。我的繼承人C#代碼:輸入字符串格式不正確

foreach (GridViewRow r in GridView1.Rows) 
{ 
     int I = (Convert.ToInt32(r.Cells[5].Text) 
       + Convert.ToInt32(r.Cells[6].Text) 
       + Convert.ToInt32(r.Cells[7].Text) 
       + Convert.ToInt32(r.Cells[8].Text) 
       + Convert.ToInt32(r.Cells[9].Text)); 
     r.Cells[10].Text = Convert.ToString(I); 
} 

例外: 「輸入字符串的不正確的格式」

這是工作的罰款更早。我切換到另一個系統,附加數據庫,在這裏做了一些更改&那裏,它現在不工作。當頁面加載時,gridview單元格已經有了值。我只是添加(總和)這些值,並在單擊按鈕時在同一個gridview的另一個單元格中顯示添加。

任何幫助表示讚賞。

+0

你試圖轉換什麼樣的值?你有個例子嗎? – Derek 2013-02-26 08:49:38

+1

您是否調試過該行?所有單元格值都可以轉換爲int? – 2013-02-26 08:50:12

+0

爲每個循環添加一箇中斷點,調試循環的時間比在這裏輸入問題花費的時間少得多,並且您也可以得到答案。 :) – 2013-02-26 09:07:53

回答

5

檢查傳遞給每個Convert.ToInt32調用的值,其中一個或多個調用不能轉換爲int

您可以通過直接查看數據庫管理器中的源代碼或單步執行代碼並觀察行列和值等來做到這一點。但是,您的解決方案仍然保持不變,並且需要兩個或兩個表單:修復數據,或修復代碼不要在意(如果這是可以接受的)。

您可能會喜歡int.TryParse爲後者的目的。

0

迭代時檢查GridViewRow的RowType。這可能是因爲你試圖從HeaderRow中解析值。我認爲你只對DataRows感興趣。

此外,您可能需要考慮不使用單元格上的索引從gridview中獲取值。如果你改變gridview的佈局,你的計算將失敗。

+0

rt!米只有在數據行和其採取零點感興趣... – adityawho 2013-02-26 09:49:31

+0

我設置行類型數據行... 的foreach(){ 如果 (r.RowType == DataControlRowType.DataRow) {//我的代碼 } } 它仍然不工作..我cud真的在這裏使用一些幫助... – adityawho 2013-02-26 11:51:50

0

您無法通過轉換將空值轉換爲有意義的值。你最好的選擇是首先檢查null,然後給結果賦值0(或其他值)(無論Convert何時發送結果)。

2

試試這個:

 foreach (GridViewRow r in GridView1.Rows) 
     { 
      int val1 = 0; 
      int val2 = 0; 
      int val3 = 0; 
      int val4 = 0; 
      int val5 = 0; 

      int.TryParse(r.Cells[5].Text, out val1); 
      int.TryParse(r.Cells[6].Text, out val1); 
      int.TryParse(r.Cells[7].Text, out val1); 
      int.TryParse(r.Cells[8].Text, out val1); 
      int.TryParse(r.Cells[9].Text, out val1); 

      int I = (val1 + val2 + val3 + val4 + val5); 

      r.Cells[10].Text = I.ToString(); 
     } 

你應該總是試圖儘可能地轉換爲另一種數據類型之前測試值。

+0

Thnx ..這工作..所以這是問題? – adityawho 2013-02-26 10:00:28

+0

沒有真正看到數據,我不能真正給你一個答案,除了一定有一些奇怪的數據,不想玩好。 – 2013-02-26 10:19:46

+0

數據是整數值(數據類型爲數據庫中的浮點數)... thnx thoh – adityawho 2013-02-26 10:47:16