2013-03-08 58 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

我花了很多時間試圖弄清楚這它讓我瘋狂。

其他人可以看到我做錯了什麼,因爲我對此很新穎嗎?

任何常見的陷阱?

克里斯

+2

我不是太熟悉的WinForms的東西,但有可能你在放'grdWarehouseCounts_CellContentChanged '通過改變if語句最後一行中的單元格值,從它自身內部發生事件? – 2013-03-08 23:03:35

+0

使用if(sendergrid.SelectedCells [0] .ColumnIndex == 3) 應該防止這種情況,對嗎?列索引必須是3 - 並且im修改列是4 – 2013-03-08 23:04:29

+0

我認爲@AbeMiessler提到的正是發生了什麼。 – hattenn 2013-03-08 23:04:30

回答

2

試試這個(而不是使用SelectedCells[0],使用e.ColumnIndexe.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 ...我做錯了什麼? – 2013-03-08 23:26:00

+0

hattenn已經正確地指出你的SelectedCell沒有改變,並且它進入了一個無限循環。 – publicgk 2013-03-08 23:30:10