2017-01-26 267 views
-1

我創建了一個計算datagridview中列的總和的程序,當我將click處理程序的邏輯重構爲一個單獨的方法時出現問題。與button2_Click相比,calcSum方法似乎沒有給出正確的輸出,它直接在點擊處理程序中具有所有邏輯。計算datagridview中列的總和c#

任何人都可以請指出我的代碼有什麼問題嗎?

//Calls sum of column method, "incorrect" output 
private void button1_Click(object sender, EventArgs e){ 
    calcSum(a,b,3); 
} 

private double calcSum(double a, double b, int c){ 
    foreach(DataGridViewRow r in dataGridView1.Rows){ 
     a = Convert.ToDouble(r.Cells[c].Value); 
     b = b + a; 
    } 
    MessageBox.Show("sum is " = b.ToString()); 
    return b; 
} 

//shows correct/calculates output 
private void button2_Click(object sender, EventArgs e){ 
    double a =0,b=0; 
    foreach (DataGridViewRow r in dataGridView1.Rows){ 
     a = Convert.ToDouble(r.Cells[3].Value); 
     b = b + a; 
    } 
    MessageBox.Show(b.ToString()); 
} 
+0

哪裏值a和b聲明或初始化?你爲什麼將它們傳遞給你的calcSum方法? – chadnt

+0

編輯試圖讓困境更加清晰。 –

回答

0

在你的方法中,你可以在循環中調用行「row」,但是在foreach中聲明它爲r。

雖然我會推薦簡化你的代碼。看看答案在這裏:how I can show the sum of in a datagridview column?

我不認爲你需要一個& b變量得到的答案,也許你在第1例不同初始化它們,當你把它們傳遞到方法。

int a= 0; 
foreach (DataGridViewRow r in dataGridView1.Rows){ 
{ 
    a += Convert.ToInt32(r.Cells[c].Value); 
} 
+0

感謝你對此... – DisplayName

-1

首先想到的,它看起來像a和b是全局變量,你應該將它們重置爲零

0

看起來你是通過你的參數a和b在別處聲明。如果您單擊按鈕時b的值不爲零,則會將其添加到結果中。試試這個:

private void button1_Click(object sender, EventArgs e){ 
    calcSum(3); 
} 

private double calcSum(int c){ 
    double a=0, b=0; 
    foreach(DataGridViewRow row in dataGridView1.Rows){ 
     a = Convert.ToDouble(row.Cells[c].Value); 
     b = b + a; 
    } 
    MessageBox.Show("sum is " = b.ToString()); 
    return b; 
} 
0
private void button1_Click(object sender, EventArgs e){ 
    calcSum(out a,out b,3); 
} 

private double calcSum(out double a, out double b, int c){ 
    foreach(DataGridViewRow r in dataGridView1.Rows){ 
     a = Convert.ToDouble(r.Cells[c].Value); 
     b = b + a; 
    } 
    MessageBox.Show("sum is " = b.ToString()); 
    return b; 
} 

你應該閱讀有關Out parameters