可以改一下locktype属性,让他不自动保存就可以了

解决方案 »

  1.   

    我的目的是当DBGRID在修改或新增的状态下,不能用鼠标进行对DBGRID的数据移动等操作!如:当在DBGRID中修改时,鼠标点击其它记录时给个提示数据正在修改不能移动!
      

  2.   

    那你可以在数据集的每个需验证的字段对象的OnValidate事件里面写判断,当验证失败后,就abort掉,记录的游标就不会滚动,也就不能post了
      

  3.   

    有啊,多的是啊,你在DataSource的OnScroll事件里面判断一下,假如dataset.state in [dsinsert,dsedit]的话,就abort掉(当然要多判断一点了)
      

  4.   

    请问如何abort掉啊???还有在datasource的onscroll事件中好象没有onscroll事件啊???
      

  5.   

    刚才笔误了,是在datasource的onUpdateData事件里面写代码
    例如:
    procedure TForm1.DataSource1UpdateData(Sender: TObject);
    begin
      if Table1.State in [dsEdit,dsInsert] then
      begin
        showmessage('数据编辑中,请先保存!');    //提示用户
        abort;
      end;
    end;
      

  6.   

    非常感谢!问题得到解决了!还有请问一个另外一个问题,我在dataset事件中看到一些如beforescroll onwillmove等事件?请问能否在这里进行判断!如行,请问如何进行?这些事件的用途如何?能否告之??待会儿我分数一定送上!谢谢
      

  7.   

    dbgrid中也没有onscroll事件!!
      

  8.   

    刚才说了,你要多判断一点了
    在条件
    if Table1.State in [dsEdit,dsInsert] then
    里面,你可以加上自己定义的判断条件,比如:
    if (Table1.State in [dsEdit,dsInsert]) and Can_Update then  
              //Can_Update是你定义的一个标志,用来判断是否要进行更新
    begin
    ...
    end;还有,在beforescroll事件里不行,因为post发生在scroll之前
      

  9.   

    不过我推荐
    "
    那你可以在数据集的每个需验证的字段对象的OnValidate事件里面写判断,当验证失败后,就abort掉,记录的游标就不会滚动,也就不能post了
    "
    这个方法
      

  10.   

    是啊,你这样做的目的是什么?
    还不是要保证用户输入数据的完整性
    假如你要输入的几个字段里,有几个是非空的,有几个是可空的
    那么在非空字段的OnValidate里面来判断一下当前字段的合法性,是空的或是无效的,就abort出来让用户重输,否则如果用户输入的数据是完整有效的,为什么不让人家保存滚动纪录?
    而对非空字段,是不是验证是由你自己定的。