Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataGridView CellContentChanged事件-堆栈溢出异常-奇怪的情况_C#_Datagrid - Fatal编程技术网

C# DataGridView CellContentChanged事件-堆栈溢出异常-奇怪的情况

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

我试图从datagridviewcell中获取值,并计算和更改另一个单元格的值

由于某种原因,我遇到堆栈溢出异常,代码:

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