Datagridview 对下一行数据的数学运算

Datagridview math operation with next row data

我有 7 列的数据网格视图。但它不绑定到任何数据库。当我按下表单上的 "Add" 按钮时,将从几个文本框中逐行添加行。但是我的第 6 列数据 (Cells[5]) 有问题。

当前行第6列数据值=下一行第2列值-当前行第2列值

我可以很容易地用 excel 做到这一点。但我如何在 datagridview 上执行此操作?欢迎提供代码。

这是我的代码。

    private void FEAdd_Click(object sender, EventArgs e)
   {
       int n = dgvFE.Rows.Add();
       dgvFE.Rows[n].Cells[0].Value = dateTimePicker1.Value.ToString("dd-MM-yyyy");
       dgvFE.Rows[n].Cells[1].Value = MtrtextBox1.Text.ToString();
       dgvFE.Rows[n].Cells[3].Value = PltrtextBox11.Text.ToString();
       dgvFE.Rows[n].Cells[4].Value = BvtextBox12.Text.ToString();

       foreach (DataGridViewRow row in dgvFE.Rows)
       {
           dgvFE.Rows[row.Index].Cells[2].Value = Math.Round((Double.Parse(dgvFE.Rows[row.Index].Cells[4].Value.ToString()) / Double.Parse(dgvFE.Rows[row.Index].Cells[3].Value.ToString())), 2).ToString();

           if (n >1)
           {
               dgvFE.Rows[row.Index-1].Cells[5].Value = Math.Round((Double.Parse(dgvFE.Rows[row.Index].Cells[1].Value.ToString()) - Double.Parse(dgvFE.Rows[row.Index-1].Cells[1].Value.ToString())), 2).ToString();
           }

       }

   }

我遇到以下错误,

'System.ArgumentOutOfRangeException' 类型的未处理异常发生在 mscorlib.dll

附加信息:索引超出范围。必须为非负数且小于集合的大小。

你有 5 列,你写了单元格[5]。它必须是细胞[4]。

dgvFE.Rows[row.Index-1] 为第 0 行抛出异常。所以添加一个索引检查

private void FEAdd_Click(object sender, EventArgs e)
{
   int n = dgvFE.Rows.Add();
   dgvFE.Rows[n].Cells[0].Value = dateTimePicker1.Value.ToString("dd-MM-yyyy");
   dgvFE.Rows[n].Cells[1].Value = MtrtextBox1.Text.ToString();
   dgvFE.Rows[n].Cells[3].Value = PltrtextBox11.Text.ToString();
   dgvFE.Rows[n].Cells[4].Value = BvtextBox12.Text.ToString();

   foreach (DataGridViewRow row in dgvFE.Rows)
   {
       row.Cells[2].Value = Math.Round((Double.Parse(row.Cells[4].Value.ToString()) / Double.Parse(row.Cells[3].Value.ToString())), 2).ToString();

       if (n > 0 && row.Index > 0)
       {
           dgvFE.Rows[row.Index-1].Cells[5].Value = Math.Round((Double.Parse(row.Cells[1].Value.ToString()) - Double.Parse(dgvFE.Rows[row.Index-1].Cells[1].Value.ToString())), 2).ToString();
       }

   }
}