你可以控制数据源中数据集的BEFORPOST事件

解决方案 »

  1.   

    设置grid1的option下的enabel edit为false!!!!!!!!
      

  2.   

    DBGrid.Options是一个集合,有个dgEdting,我忘了怎么控制它了:(
    能说详细一点吗?
      

  3.   

    我就是在BeforePost那里控制的
    但不知道怎么
      

  4.   

    我不知道你是要修改了之后不要DBGrid立即存盘,还是根本就不许改数据。
    如果是修改了暂时不存盘,可以使用缓冲更新机制,如果是根本就不许改,就直接把DBGrid的Options中的dgEditing属性设置为False就行了,或者把DBGrid的ReadOnly设置为True也可以
      

  5.   

    同意楼上使用缓冲更新机制,需要post时手工提交
      

  6.   

    但是我是直接编辑DBGrid的Cell,而DBGrid帮定了数据源,
    这个也有缓冲的吗?我发现在BeforePost里面Table1.Cancel可以做到,但是有提示错误,但不怎么影响以后的操作。但是这样提示错误,就不怎么好了
    key violation
    [Microsoft][ODBC Microsoft Access 驱动程序]由于将在索引、关键字,或关系中创建重复的值,对表的改变没有成功。
    General SQL error
    改变...
      

  7.   

    楼主给分,呵呵DBGrid.Readonly := true;if (楼主的分)<>'readonly' then
       我的分++;
      

  8.   

    no,试过了,还是不行的况且那我还是要改的呀
    只是当他数据非法的时候不让post
      

  9.   

    我还是不太明白你的意思,你要求可以改,但是你又要把改的东西Cancel掉,那是怎么回事?你的改动又有何实际意义呢?
      

  10.   

    onPost
    Cancel;
    beforePost
    Cancel;
      

  11.   

    哦,你是要校验数据而已嘛?这个只要在BeforePost事件里边写代码就行了,如果有非法数据就不允许Post,其实只要在BeforePost里边写个Exit语句就不会提交了,不用Cancel,如果用Cancel会把整条记录都放弃掉的
      

  12.   

    要是用的是ADODataSet的话,就直接ADODataSet1.UpdateBatch();
    对修改过的数据做批处理保存
      

  13.   

    要是用的是ADODataSet的话,就直接ADODataSet1.UpdateBatch();就可以了,直接批处理保存
      

  14.   

    重写TTable或TQuery控件,重载其Post方法为Cancel,另加一个方法如:PostData,实现真正的Post,我一直都这样做。
      

  15.   

    把adoquery1的locktype屬性設成ltBatchOptimistic就可以了!
    更新時用UpdateBatch(arall);
      

  16.   

    使用批次更新吧,即把跟grid连接的记录集的locktype屬性設成ltBatchOptimistic就可以了,在最后真正post的时候调用记录集的updatebatch
      

  17.   

    解决方案:1、在onBeforePost里面写校验代码,如果发现非法数据就raise Exception.Create(……),这样数据就不会更新;2、可以考虑使用缓存机制,各位楼上的说了BDE、ADO的缓存机制,我补充一下,也可以用TClientDataSet的缓存机制。
      

  18.   

    在OnBeforePost
    中写上Abort语句就不能自动提交了
    ....  OnBeforePost(....)
    beginAbort;
    end;你也许会问我正常提交正么办?那么你正常提交的化这么办
    Var
    TmpEvent :TDataSetNotifyEvent;
    begin
    TmpEvent := DBGrid1.DataSource.DataSet.BeforePost;
    DBGrid1.DataSource.DataSet.BeforePost :=nil;
    DBGrid1.DataSource.DataSet.Post;
    DBGrid1.DataSource.DataSet.BeforePost :=TmpEvent;
    end;end;
      

  19.   

    DataSource1.AutoEdit:=false;
    table1.Cancel;//修改不存盘
    table1.post;//提交数据库