我把数据从datatable绑定到datagridview,然后想修改后一列计算:
 private void OrderDGV_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                //数量自增
                float tsum = Convert.ToSingle(OrderDGV[3, e.RowIndex].Value.ToString()) + Convert.ToSingle(OrderDGV[4, e.RowIndex].Value.ToString());
                OrderDGV[5, e.RowIndex].Value = tsum.ToString();
                //金额自增
                float tmoney = Convert.ToSingle(OrderDGV[5, e.RowIndex].Value.ToString()) * Convert.ToSingle(OrderDGV[6, e.RowIndex].Value.ToString());
                OrderDGV[14, e.RowIndex].Value = tmoney.ToString();
            }
            catch { }
        }
但是报错了!
        未处理的“System.StackOverflowException”类型的异常出现在 System.Windows.Forms.dll 中。
        确保您没有无限循环或无限递归
这是为何?

解决方案 »

  1.   

    catch()
    里面没写异常
    如:
    catch(StackOverflowException e)
    {
    .....
    }
    catch(Exception ex)
    {
    ....
    }
      

  2.   

    找到问题,是OrderDGV[5, e.RowIndex].Value = tsum.ToString();
    前半句有错,我把tsum用show方法显示出来,没问题,可以计算,这 前半句
    OrderDGV[5, e.RowIndex].Value 这个值没有变
      

  3.   

    因为数据我是直接查询到然后放到datatable,直接绑定到datagridview,是不是不能改动呢?
      

  4.   

    datatable绑定到datagridview后,在后面追一列
      

  5.   


     DataGridViewTextBoxColumn textColumn =new DataGridViewTextBoxColumn(); 
                textColumn.DataPropertyName = "追加的列";
                //名字和Header设定
                textColumn.Name = "textColumnadd";
                textColumn.HeaderText = "手动追加的列";
                //列追加
                dataGridView1.Columns.Add(textColumn);
      

  6.   

    搞定了!//数量自增
                if (e.ColumnIndex == 3 || e.ColumnIndex == 4)
                {
                    if (e.RowIndex == -1)
                    {
                        return;
                    }
                    else
                    {
                        float tsum = Convert.ToSingle(OrderDGV[3, e.RowIndex].Value.ToString()) + Convert.ToSingle(OrderDGV[4, e.RowIndex].Value.ToString());
                        this.OrderDGV[5, e.RowIndex].Value = tsum.ToString();
                    }
                }
    这样就OK 了!泪流满面!