C# DataGridView CellContentChanged事件-堆栈溢出异常-奇怪的情况
我试图从datagridviewcell中获取值,并计算和更改另一个单元格的值 由于某种原因,我遇到堆栈溢出异常,代码:C# DataGridView CellContentChanged事件-堆栈溢出异常-奇怪的情况,c#,datagrid,C#,Datagrid,我试图从datagridviewcell中获取值,并计算和更改另一个单元格的值 由于某种原因,我遇到堆栈溢出异常,代码: private void grdWarehouseCounts_CellContentChanged(object sender, DataGridViewCellEventArgs e) { // calculate variance DataGridView sendergrid = (DataGridView)sender; if (sendergrid.S
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;
}
}
这是网格:
我花了很多时间试图弄明白这一点,这让我发疯
其他人能看到我做错了什么吗,因为我对这方面还相当陌生
有什么常见的怪癖吗
Chris试试这个(不要使用SelectedCells[0]
,而是使用e.ColumnIndex
和e.RowIndex
):
我对winforms的东西不太熟悉,但是您是否可以通过更改if语句最后一行的单元格值,从内部触发
grdWarehouseCounts\u CellContentChanged
事件?使用if(sendergrid.SelectedCells[0]。ColumnIndex==3)应该可以防止这种情况,对吗?列索引必须是3,我修改的列是4,我想@AbeMiessler提到的正是发生的事情。一种简单的检查方法是注释掉if
的最后一行。如果这样做,错误会消失吗?@ChrisNorris检查所选单元格的列索引是否等于3。在CellContentChanged
事件中更改某些内容时,所选单元格保持不变。因此,它总是不断地输入if子句,并一次又一次地调用自己。hattenn已经正确地指出,您的SelectedCell没有改变,它进入了一个无限循环。。
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;
}
}