用DELPHI的网格控件输入数据,要求不使用批量更新模式。如:编号,名称....几个字段,要求编号不能为空,如果为空就提示并把焦点设在该列,并不保存。但是在网格控件中,如果我在某行输入了数据,只要把焦点移动到其他行,就自动POST了,现在需要只要编号为空字符或NULL就不POST,并且给出提示和移动焦点到没有输入的地方,怎么做呢?

解决方案 »

  1.   

    处理 BeforePost  事件
      

  2.   

    去处理DBGrid.DataSource.DataSet的onBeforePost事件!
      

  3.   

    onBeforePost事件
    if trim(DataSet.fieldbyname('fieldname').asstring) = '' then
    begin
      application.messagebox();
      dbgrid.selectindex := 1//选择那列的index
      dataset.cancel;
    end;
      

  4.   

    我知道是处理onBeforePost事件,问题是在事件中怎么让DATASET不POST?
      

  5.   

    你们知道吗?你们的操作和我一样。但不能解决问题。
    当网格中有数据的时候,比如有那么几行,那么如同 lzy6204(为了忘却的记忆) 的操作----dataset.cancel;是没有问题的。
    如果是空数据库,我新增的第一行,如果我在编号字段中随便输入一个什么字符串,然后删掉,然后再在用TAB移动到下一行,这个时候dataset.cancel就似乎没有起作用了,这个时候会有出错提示,不能插入空在编号字段,这才是最关键的问题。
      

  6.   

    直接按BACKSPACE键,就象在文本编辑器里一样,把字符删掉,不是删除行。
      

  7.   

    其实我认为你可以用别的控件来解决呀,比如STRINGGRIG,当主键格子失去焦点的时候提示
    回车的时候更新记录
      

  8.   

    afterscroll事件也一起控制啊
    有很多控制方法的