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

解决方案 »

  1.   

        我做了个试验,当我在某个单元格,没有输入任何值,直接Enter,不会激发CellEndEdit事件,这样当然无法进行空值判断了,所以说最理想的还是在CellValidating中进行验证,但又会发生上述所说的在输入中途不能退出的情况
      

  2.   

    你又在这里重开帖子,
    那个帖子已经回答你了设置按钮、容器控件的CausesValidation=false
      

  3.   

      但我还是不清楚啥时候执行CausesValidation=false,因为如果将这句代码放在formclosing中呢是不行的,因为是先执行cellvalidating,后执行formclosing
      

  4.   

    可能是我没说清楚,
    最简单的:
    在设计界面,找到按钮、或其容器控件的CausesValidation属性,直接修改当然如果你愿意,也可以在Form构造方法、或Form_Load方法中写其实它的作用就是说:这个控件不会触发验证。
      

  5.   

    无意中看到你这个帖子:
    建议选用:CellValidating
    如果你想页面关闭不验证,那么请触发:FormClosing(object sender, FormClosingEventArgs e)
     e.Cancel = false; 来进行取消验证