J'ai créé un programme qui calcule la somme d'une colonne dans un datagridview, le problème survient lorsque je refactorise la logique du gestionnaire de clic dans une méthode distincte. La méthode calcSum ne semble pas me donner la sortie correcte par rapport à button2_Click qui a toute la logique directement dans le gestionnaire de clics.

Quelqu'un peut-il indiquer ce qui ne va pas avec mon code?

//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
DisplayName 26 janv. 2017 à 23:46

4 réponses

Meilleure réponse

Dans votre méthode, vous appelez la ligne "row" à l'intérieur de la boucle, mais la déclarez comme r dans le foreach.

Je recommanderais cependant de simplifier votre code. Jetez un oeil à la réponse ici: comment je peut afficher la somme de dans une colonne datagridview?

Je ne pense pas que vous ayez besoin des variables a et b pour obtenir votre réponse et peut-être que vous les initialisez différemment dans le premier exemple lorsque vous les passez dans la méthode.

int a= 0;
foreach (DataGridViewRow r in dataGridView1.Rows){
{
    a += Convert.ToInt32(r.Cells[c].Value);
}
1
Community 23 mai 2017 à 11:53

Il semble que vous passez vos paramètres a et b sont déclarés ailleurs. Si b a une valeur autre que zéro lorsque vous cliquez sur le bouton, il sera ajouté aux résultats. Essaye ça:

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
chadnt 26 janv. 2017 à 21:02
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;
}

Vous devriez lire à propos des Paramètres de sortie

0
Sourav Sarkar 4 oct. 2017 à 16:58

Tout d'abord, il semble que a et b sont des variables globales, vous devriez les remettre à zéro

-1
user2709119 26 janv. 2017 à 20:56