【问题标题】:Calculate sum of a column in a datagridview c#计算datagridview c#中列的总和
【发布时间】:2017-01-26 20:46:22
【问题描述】:

我创建了一个计算数据网格视图中列的总和的程序,当我将点击处理程序中的逻辑重构为单独的方法时,就会出现问题。与button2_Click 相比,calcSum 方法似乎没有给我正确的输出,button2_Click 的所有逻辑都直接在点击处理程序中。

谁能指出我的代码有什么问题?

//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());
}

【问题讨论】:

  • 值 a 和 b 在哪里声明或初始化?为什么要将它们传递给 calcSum 方法?
  • 已编辑以尝试使困境更清晰。

标签: c# datagrid


【解决方案1】:

在您的方法中,您在循环中调用行“行”,但在 foreach 中将其声明为 r。

不过,我建议您简化代码。看看这里的答案:how I can show the sum of in a datagridview column?

我认为您不需要 a & b 变量来获得答案,也许您在第一个示例中将它们传递给方法时对它们进行了不同的初始化。

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

【讨论】:

    【解决方案2】:

    看起来您正在传递参数 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;
    }
    

    【讨论】:

      【解决方案3】:
      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

      【讨论】:

        【解决方案4】:

        首先想到,a和b好像是全局变量,你应该将它们重置为零

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-26
          • 2012-02-26
          • 2013-09-13
          相关资源
          最近更新 更多