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

DataGridView验证问题,在CellEndEdit和CellValidating中验证都不能满足要求呢
在datagridView中执行验证时,一般是在CellEndEdit和CellValidating中执行验证。我分别在这两个事件中来实现验证,发现在这两个事件中执行验证会出现下列现象,均不太满足我的需求,请大家来评判一下该怎么办?

  CellEndEdit:
  在这里确实可以获取输入的值(输了肯定能获取,但有时候没输入数库直接Enter跳走就不一定了),然后进行验证,但问题是会出现这种情况:我们一旦在某个单元格输入了数据库后,然后按Enter键后,会自动执行CellEndEdit中的验证代码,根据验证结果如果错误,则给出提示后,但这时它会自动跳到下一行的同列单元格,问题出在下面:当跳到下一单元格后,如果此时你什么都不用输入,直接按Enter跳到下一单元格时,此时不会执行CellEndEdit中的代码(因为我需要判断有没有输入值,如果没有输入值则不行,也就是用户不断按enter跳走后验证代码是不会执行的)。
   
  CellValidating:
  在这里也可以实现验证,而且一旦你判断了输入为空值,并且将e.Cancel=True后,此时输入单元格依然停留在出错的单元格中,这样很好,符合我的要求。但它会出现这种情况:就是当我在所有单元格中(都验证了不能为空)输入了一半数值的时候,如果这时候我需要关闭这个窗口时结果就会发生不断的提示验证错误,不能有空值的提示,导致你不能转到其它地方,
  有没有什么办法,让我拥有在CellValidating中的验证功能,但我需要在录入一部分后可以马上关闭该MDI窗口呢(我用的多窗口模式设计的,就是这个时候想关闭这个窗口是不行的,能不能在这个窗口的Close()代码中中通知DataGridView取消验证功能呢???

------解决方案--------------------
你又在这里重开帖子,
那个帖子已经回答你了

设置按钮、容器控件的CausesValidation=false