2017-01-26 160 views
-1

DataGridviewの列の合計を計算するプログラムを作成しましたが、この問題はクリックハンドラのロジックを別のメソッドにリファクタリングするときに発生します。 calcSumメソッドは、クリックハンドラ内のすべてのロジックを直接持っているbutton2_Clickと比較して正しい出力を得られないようです。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

を、あなたは、ループ内で行「行」と呼ぶが、foreachの中のRとしてそれを宣言する。

あなたのコードを単純化することをお勧めします。 how I can show the sum of in a datagridview column?

回答には&変数が必要ではないと思われます。また、メソッドに渡すときに、最初の例でそれを別々に初期化していると思われます。

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

ありがとうございます... – DisplayName

-1

まず考えたのは、それはaとbがグローバル変数であるように、あなたはあなたのパラメータa、bは他の場所で宣言されて渡しているように見えゼロ

0

にそれらをリセットする必要がありそうです。ボタンをクリックしたときに、bが0以外の値を持つ場合、結果にその値が追加されます。このお試しください:あなたの方法では

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

関連する問題