C# 具有下一行数据的Datagridview数学运算

C# 具有下一行数据的Datagridview数学运算,c#,math,datagridview,rows,cells,C#,Math,Datagridview,Rows,Cells,我有7列的datagridview。但它不绑定到任何数据库。当我按下表单上的“添加”按钮时,将从几个文本框中逐行添加行。但是我的第6列数据单元有一个问题[5] 当前行第6列数据值=下一行第2列值-当前行第2列值 我可以用excel很容易地做到这一点。但是如何在datagridview上执行此操作?欢迎使用密码 这是我的密码 private void FEAdd_Click(object sender, EventArgs e) { int n = dgvFE.Rows

我有7列的datagridview。但它不绑定到任何数据库。当我按下表单上的“添加”按钮时,将从几个文本框中逐行添加行。但是我的第6列数据单元有一个问题[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();
           }

       }

   }
我得到下面的错误

mscorlib.dll中发生类型为“System.ArgumentOutOfRangeException”的未处理异常


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

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

   }
}

很抱歉给你带来了困惑。我在这里提到的第五列是单元格[5]。因为我有7列。那么行[row.Index-1]呢。对于第一行,索引为0。row.Index-1将为负如果dgv中没有第二行,则第一行单元格[5]的值可以为空。没关系。如果有多行,我需要做上面提到的数学题。这行代码dgvFE.Rows[row.Index-1]是ArgumentOutOfRangeException的源代码。如果Row.index>0,则无法创建行[某些负数]添加条件。当我在dgv中输入数据中的第三行时,该条件有效。当只有两行时,为什么它不起作用?我更新了我的答案。将n>1更改为n>0。在这里使用了你的代码,但没有注意到