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