2013-03-08 2 views
0

Я пытаюсь принимать значения из datagridviewcell и вычислять и изменять значение другой ячейки.Событие DataGridView CellContentChanged - исключение StackOverflow - странная ситуация

По какой-то причине, я бегу в исключение переполнения стека, код:

private void grdWarehouseCounts_CellContentChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    // calculate variance 
    DataGridView sendergrid = (DataGridView)sender; 
    if (sendergrid.SelectedCells[0].ColumnIndex == 3) 
    { 
    decimal Qty = Convert.ToDecimal(sendergrid.Rows[sendergrid.SelectedCells[0].RowIndex].Cells[3].Value); 
    decimal Count = Convert.ToDecimal(sendergrid.Rows[sendergrid.SelectedCells[0].RowIndex].Cells[4].Value); 
       sendergrid.Rows[sendergrid.SelectedCells[0].RowIndex].Cells[4].Value = Qty - Count; 
    } 
} 

Вот сетка:

enter image description here

Я потратил много времени, пытаясь понять это и это сводит меня с ума.

Может ли кто-нибудь еще увидеть что-то, что я делаю неправильно, поскольку я довольно новичок в этом?

Любые распространенные ошибки?

Chris

+2

Я не слишком хорошо знакомы с WinForms вещи, но это возможно, что вы обжиг 'grdWarehouseCounts_CellContentChanged 'изнутри себя, путем изменения значения ячейки в последней строке вашего оператора if? –

+0

с использованием if (sendergrid.SelectedCells [0] .ColumnIndex == 3) следует предотвратить этот сценарий, исправить? Индекс столбца должен быть 3 - и модификация столбца составляет 4 –

+0

. Я думаю, что то, что @AbeMiessler упомянул, именно то, что произошло. – hattenn

ответ

2

Попробуйте это (вместо использования SelectedCells[0] используйте e.ColumnIndex и e.RowIndex):

private void grdWarehouseCounts_CellContentChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    // calculate variance 
    DataGridView sendergrid = (DataGridView)sender; 

    //if (sendergrid.SelectedCells[0].ColumnIndex == 3) 
    if (e.ColumnIndex == 3) 
    { 
    decimal Qty = Convert.ToDecimal(sendergrid.Rows[e.RowIndex].Cells[3].Value); 
    decimal Count = Convert.ToDecimal(sendergrid.Rows[e.RowIndex].Cells[4].Value); 
    sendergrid.Rows[e.RowIndex].Cells[4].Value = Qty - Count; 
    } 
} 
+0

Спасибо publicgk ... что я делал неправильно? –

+0

hattenn уже правильно указал, что ваш SelectedCell не менялся, и он столкнулся с бесконечным циклом. – publicgk

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