DBGrid中的数据为什么编辑后,离开所在行,就会自动更新呢?
我想让它必须点击一个按键才能更新,怎么实现呢?

解决方案 »

  1.   

    to hotzhu(非洲白脸)
     怎么实现“属性缓存更新”请给出具体代码,谢谢
      

  2.   

    你用的是ado之类的引擎把,没缓冲机制。
      

  3.   

    将LockType属性改为 ltBatchOptimistic
      

  4.   

    你把dbgrid的option中rowselected设置为true
    那样你就不可以编辑单元格了,
    或者Dbgrid的datasource中autoedit属性设置为false;
      

  5.   

    用ADO的话将LockType属性改为 ltBatchOptimistic
    用BDE的话,把query和一个updatesql相连,然后把cachupdate设置为true就好了
      

  6.   

    说过了:将LockType属性改为 ltBatchOptimistic!!!
      

  7.   

    ado的BatchUpdate模式
    下面就是进入BatchUpdate模式的必要设定:
    1  设定CursorType为KeySet或Static。
    2  设定LockType为BatchOptimistic。
    3  执行的SQL命令必须是Select。
    除此之外,CursorLocation也是程序员必须考虑的设定。虽然在Microsoft的文件中说明,BatchUpdate可以使用Server-SideCursor或Client-SideCursor。但是,如果使用BatchUpdate再搭配Server-SideCursor,那么不但无法使用Briefcase模型,在执行效率上也不好。
    4  设定CursorLocation为clUseClient。
    当ADO进入BatchUpdate模式时,所有对于数据的修改都是暂存在客户端中。当客户端决定把数据真正更新回数据源中时,可以调用TADODataSet、TADOQuery、TADOTable或TADOStoredProc组件的UpdateBatch方法。而UpdateBatch方法接受一个参数,这个参数代表客户端要把哪些修改的数据更新回数据源中。
    下面是UpdateBatch方法的原型:
    procedure UpdateBatch(AffectRecords:TAffectRecords=arAll);
    UpdateBatch方法的参数说明如下;
    arAll:更新所有修改的数据更新回数据库。
    arCurrent:只把目前记录的修改数据更新回数据库。
    arFiltered:只把符合过滤条件的数据更新回数据库
    arAllChapters:更新所有被影响的Chapters;
    注:arAll只表示更新所有自己当时修改的数据。数据库可同时被其他人使用,而其他人对数据库的修改也同时生效,自己对数据库的修改不会影响其他人对数据库的操作(除非都是修改的同一字段,此时同一字段将以最后一次的修改结果为准)。
      

  8.   

    ADO LockType属性改为 ltBatchOptimistic
    保存写
      ADOdataSet.UpdateBatch
    取消写
      ADOdataSet.CancelBatch
    用BDE的话,把query和一个updatesql相连,然后把cachupdate设置为true就好了
    同理