日期:2014-05-18  浏览次数:20877 次

datagridview中CellValidating中出现无限循环了,不知怎么办?
今天我用DataGridView做了一个测试,本意是验证用户在单元格的输入,不符要求就给出提示,符合要求就跳到另一个单元格中,可是却出现死循环。
  我的DataGridView1_CellValidating代码如下:
  int row = e.RowIndex;
  int col = e.ColumnIndex;
  if (col==1) //这里我只对第二列进行操作
  {
  switch (row )
  {
  case 0:
  if (String.IsNullOrEmpty(e.FormattedValue.ToString()))
  {
  MessageBox.Show("不能输入空值");
  e.Cancel = true; //返回重输。
  }
  else //问题就出在下面。
  {
  e.Cancel = false; //这一句刚开始没加,后来加上也不行。
  dataGridView1.CurrentCell = dataGridView1.Rows[row + 2].Cells[col];
  //我单步调试时发现,执行上一句后,程序马上就又进入了这个CellVadating中执行。但这个row和col依然没变化。有什么办法跳出循环呢?
  }
  break;
  case 2:
  if (e.FormattedValue.ToString() != "123")
  {
  MessageBox.Show("can not 123");
  e.Cancel = true;
  }
  else
  dataGridView1.CurrentCell = dataGridView1.Rows[row + 2].Cells[col];
  break;

  }

  所有现象和问题都已经在前面了,有什么办法跳出这个CellVadating循环呢?

------解决方案--------------------
Validating只进行验证,
在Validated中是可以进行验证后操作的,
至于你的代码没有实现意图,那是跳转代码的问题。
尝试下单步跟踪。

要使按钮强制终止数据控件的验证,只需做如下设置:
按钮的CausesValidation属性设为false
如果仍然验证,检查按钮的容器(如Panel)的CausesValidation属性。