stackoverflowExcepton 堆栈益处!
是第一次执行到这里就出错了吗?跟踪一下!

解决方案 »

  1.   

    一般不这么用,你这么写就行了
    dataGrid1.items[2].cells[3].text=500
      

  2.   

    我没有设置数组,另外这里是win form. datagrid里没有items属性。
    我跟踪的时候程序永远都执行这一句。
    之所以这样设置主要是为了自动改变datagrid中的某些列的值。
    另外,如果我改为 datarow[5]=50;这样的语句也一样的错误。why?
      

  3.   

    谁能解决呢?stackoverflowException ,这个异常怎么处理?
      

  4.   

    >>我跟踪的时候程序永远都执行这一句。<<
    我知道原因:当 变量=值; 的时候,会去执行 变量.set 这个默认(隐藏)的方法。因为自己的需要(如:保证赋的值不超出范围),在这个方法中,还会再次调用 自己的set 。如果set方法没有处理好的话,会一直调用自己的set,无穷的递归(死循环)。而递归是需要设置 堆栈 记录递进时的状态,碰到无穷的递进时,堆栈越来越多,超出了系统允许的范围,就有了stackoverflowException的错误!
    你跟踪的现象肯定是,用F10跟踪,但黄色一直在那一行,按了几十下F10后,不耐烦了,就用F5,结果还是那句出错!就是因为 datagrid调用了自己的set N次。
    因为我自己写控件的时候碰到过,跟踪了很久才发现的!解决,如果是System.Windows.Forms.DataGrid的话,微软写的,这么多人在用,不应该有问题的!重装系统或vs.net。
    还有可能,这不是System.Windows.Forms.DataGrid,而是你不知从那里引用进来的。那就找到它的定义在 DataGrid dataGrid1 的 DataGrid 上右键GoToDefinition看看,它是从哪里来的。或者在跟踪的时候用F11,看能不能看到更多的代码!
      

  5.   

    我试了一下,可以通过。
    dataGrid1[3,5]代表单元格的第3行,第6列。
    如果所指单元格没有,则出现“System.ArgumentOutOfRangeException”类型的异常。
    是否使用了递归或循环一类的流程?
    能否提供更加详细的上下文程序
      

  6.   

    我没有用数组,datagrid for win 是微软的,jhnhu(jhnhu)说的有道理,
    执行时永远也停在那一句。但我在别的form里面同样的语句能正确执行。
    要怎样解决这个异常呢?
      

  7.   

    解决,上面已经说过了。你肯定没有引用其他什么类库吗?
    再新建一个form,把代码拷贝过去!
      

  8.   

    我试过,在其它form里面完全通过。因为我的程序比较大,在两个稍微复杂一点的程序里就是不通过. quanity=(int)dataGrid[dataGrid.CurrentRowIndex,4] 这种取数据的语句完全没问题.
    就是给赋值有问题。
      

  9.   

    其实代码不复杂。大概就是在一个数据集里检测列改变事件,当发生改变后要算出另外一个列的数据,并显示出来。主要代码如下: private void DdIn_ColumnChanged(object sender,System.Data.DataColumnChangeEventArgs e)
    {
    try
    {
    int dd_quantity           =  (int)e.Row["电镀数量"];
    double inprice            =  (double)e.Row["进价"];//胚的进价
    double dd_quote           =  (double)e.Row["电镀报价"];
    double dd_waste_percent   =  (double)e.Row["损耗百分比"];
    int dd_waste              =  (int)e.Row["电镀损耗"];
    if((dd_quantity-dd_waste)<=0)

    MessageBox.Show("这批产品全部报废,没有计算出成本","警告",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
    return;
    }
    //   double prod_cost=(dd_quantity*inprice+(dd_quantity-dd_waste)*dd_quote)/(dd_quantity-dd_waste);
    double prod_cost;
    double dd_reasonable_percent; dd_reasonable_percent=(double)dd_waste/dd_quantity;
    if(dd_reasonable_percent<=dd_waste_percent)
    prod_cost=(dd_quantity*inprice+(dd_quantity-dd_waste)*dd_quote);
    else
    // prod_cost=inprice*(dd_cost_percent*dd_quantity)+dd_quote*(dd_quantity-dd_waste);
    //产品成本=进价*(电镀总数-厂商应承担的数量)+电镀单价*(电镀数量-损耗数量)
    prod_cost=inprice*(dd_quantity-(dd_waste-dd_waste_percent*dd_quantity))+dd_quote*(dd_quantity-dd_waste);
    e.Row["产品成本"]=(object)prod_cost;
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message);
    }当执行e.Row["产品成本"]=(object)prod_cost;这一句里显示stackflowException ,跟踪的话永远执行这一句。