2015-02-22 2 views
0

У меня есть datagridview с 7 столбцами. Но он не привязан к какой-либо базе данных. Строки будут добавляться из нескольких текстовых полей по строкам, когда я нажимаю кнопку «Добавить» в моей форме. Но у меня проблема с данными моего шестого столбца (ячейки [5]).Математическая операция Datagridview со следующими данными строки

текущей строка шестого значения данных столбца = следующая строка значение второго столбца - текущая строка значение второго столбца

я могу сделать это с первенствуете очень легко. но как я могу это сделать на 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

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

ответ

0

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

    } 
} 
+0

Это сработало, когда я ввел 3-й ряд данных в dgv. почему он не работает, когда есть только две строки? –

+0

Я обновил свой ответ. измените 'n> 1' на' n> 0'. использовал ваш код здесь и не заметил, что – ASh

+0

Большое вам спасибо. это сработало. –

0

У вас есть 5 столбцов, и вы пишете ячейки [5]. это должны быть ячейки [4].

+0

Извините за замешательство. Пятая колонка, упомянутая здесь, - это клетки [5]. Потому что у меня 7 столбцов. –

+1

Как насчет строк [row.Index-1]. для вашей первой строки индекс = 0. row.Index-1 будет отрицательным –

+0

Значение ячейки первой строки [5] может быть нулевым, если в dgv нет второй строки. Это не имеет значения. Если есть несколько строк, мне нужно сделать математику, о которой я говорил выше. Любая удача с этим? –

Смежные вопросы