Математическая операция 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].