2017-01-26 7 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

Где значение а и б объявленных или инициализируются? Почему вы передаете их методу calcSum? – chadnt

+0

Отредактировано, чтобы попытаться устранить дилемму. –

ответ

0

В вашем методе, вы вызываете строку «строка» внутри цикла, но объявить его как г в Еогеасп.

Я бы рекомендовал упростить код. Посмотрите ответ здесь: how I can show the sum of in a datagridview column?

Я не думаю, что вам нужно & переменные Ь, чтобы получить в ответ и, возможно, вы инициализирует их по-разному в 1-м, например, когда вы передаете их в метод.

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

спасибо за это ... – DisplayName

-1

Первая мысль, это выглядит как и б глобальные переменные, вы должны сбросить их к нулю

0

Это выглядит, как вы передаете ваши параметры а и б объявлены в другом месте. Если значение 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