DataGridView单元格导致简单箭头键的验证

时间:2014-12-03 04:55:04

标签: c# .net winforms datagridview

为什么DataGridView在通过箭头键进行简单导航时会引发CellValidating事件?我该怎样预防呢?以下是DataGridView调用CellValidating时的状态的关键信息:

EditMode = EditOnKeyStrokeOrF2
IsCurrentCellInEditMode = False
e.FormattedValue = [Same as the current value of the cell]

如您所见,用户未触发任何编辑操作。他只是按右箭头键移动细胞。人们不希望此时发生验证,对吗?

注意:检查调用堆栈会显示KeyDown事件会触发CommitEdit调用,从而引发OnCellValidating

1 个答案:

答案 0 :(得分:0)

无论喜欢与否,这就是事物本身的工作方式。请参阅CellValidating上的MSDN

  

当单元格失去输入焦点,启用内容验证时发生。

并在CellValidated上完成MSDN

  

在单元格完成验证后发生。

最直接,最易读的解决方案可能是在CellValidating事件开始时加上这样的一行:

if (!dataGridView1.IsCurrentCellDirty)  return;

设计行为的一个原因可能是实际需要用户输入来创建有效单元格值的情况。不是你的情况,但仍然是一个可以想象的要求。