Математическая операция Datagridview с данными следующей строки

У меня есть датагридвью с 7 столбцами. Но это не привязка к любой базе данных. Строки будут добавляться из нескольких текстовых полей построчно, когда я нажимаю кнопку "Добавить" в моей форме. Но у меня проблема с данными 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

Дополнительная информация: индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции.

2 ответа

Решение

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 столбцов, и вы пишете ячейки [5]. это должны быть клетки [4].

Другие вопросы по тегам