日期:2014-05-19  浏览次数:20794 次

来帮我看一句死循环
不理解下面这句为何死循环?
  private   void   myDataGridView1_CellValueChanged(object   sender,   DataGridViewCellEventArgs   e)
                {
                        MessageBox.Show(DateTime.Now.Date.ToString());
                        this.myDataGridView1.Rows[e.RowIndex].Cells[15].Value   =   DateTime.Now.Date;
                }

------解决方案--------------------
this.myDataGridView1.Rows[e.RowIndex].Cells[15].Value = DateTime.Now.Date;
这条语句会重新触发CellValueChanged事件,,,所以是死循环...
------解决方案--------------------
这必然是死循环.而且是,在你触发changed事件以后开始的
this.myDataGridView1.Rows[e.RowIndex].Cells[15].Value = DateTime.Now.Date;
因为你有上面这句.
简单理解是:在你第一次触发changed事件后,首先输出一个弹出框.然后更改里面的值.这时候又触发了changed事件,如此反复死循环就开始了
------解决方案--------------------
改变Cell的值触发CellValueChanged事件,CellValueChanged事件处理中又改变Cell的值
当然死循环~
------解决方案--------------------
我的意思是
if (this.myDataGridView1.Rows[e.RowIndex].Cells[15].Value != DateTime.Now.Date)
{
this.myDataGridView1.Rows[e.RowIndex].Cells[15].Value = DateTime.Now.Date;
}
当条件不符合时,就不会执行赋值操作,也就不会再触发CellValueChanged事件了吧。

我没怎么用过.net,正在学习,不知道是不是正确!