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属性。