2017-05-09 116 views
1

我想在DataGridView中求和單元格並將結果顯示在MessageBox中。c#datagridview總和單元格值

我有兩個DataGridViews。第一個DataGridView從數據庫獲取數據。從第一個DataGridView中選擇行後,第二個DataGridView獲取值。

這是我的代碼

private void actionStatistics_Click(object sender, EventArgs e) 
    { 
     int total = 0; 

     for (int i = 0; i < productsDataGridView.Rows.Count; i++) 
     { 
      total += int.Parse(productsDataGridView.Rows[i].Cells[6].Value.ToString()); 
     } 

     MessageBox.Show("Total quantity: " + total); 
    } 

我在這一行出現錯誤:

 total += int.Parse(productsDataGridView.Rows[i].Cells[6].Value.ToString()); 

錯誤是:

 An unhandled exception of type 'System.NullReferenceException' occurred in task3.exe. 
    Additional information: Object reference not set to an instance of an object. 

誰能幫我想想辦法?

+1

我認爲問題是細胞[6]沒有任何價值 – jcvegan

回答

0

檢查空增值前:

total += int.Parse(productsDataGridView.Rows[i].Cells[6]?.Value?.ToString()); 

還是老辦法:

for (int i = 0; i < productsDataGridView.Rows.Count; i++) 
     { 
      if(productsDataGridView.Rows[i].Cells[6] !=null && productsDataGridView.Rows[i].Cells[6].Value != null) 
      { 
       total +=  int.Parse(productsDataGridView.Rows[i].Cells[6].Value.ToString()); 
      } 
     } 
0
  1. 細胞[I,6]爲空,則使用狀況進行檢查。
  2. 這是一個更好的做法,檢查值是否是一個數字,因爲如果它不是一個數字,你會得到一個例外(當使用Parse()而不是TryParse())。 這裏是一個例子,如何與extension method做到這一點。

    private void actionStatistics_Click(object sender, EventArgs e) 
        { 
         int total = 0; 
    
         for (int i = 0; i < productsDataGridView.Rows.Count; i++) 
         { 
          if (productsDataGridView.Rows[i].Cells[6] != null && (productsDataGridView.Rows[i].Cells[6].Value.ToString().IsNumeric())) 
          { 
           total += int.Parse(productsDataGridView.Rows[i].Cells[6].Value.ToString()); 
          } 
         } 
    
         MessageBox.Show("Total quantity: " + total); 
        } 
    
    } 
    public static class ExtensionMethods 
    { 
        public static bool IsNumeric(this string s) 
        { 
         float output; 
         return float.TryParse(s, out output); 
        } 
    }