各位高手,小弟現有一關於CXGRID的問題不明白.望指點迷津
在CXGRID中如果要新增一倏空記錄的話,用adoquery1.append;
就可以新增一倏空記錄
但同時也會將前倏記錄上傳到服務器
可現在能否實現新增一倏空記錄時,而不把原有記錄上傳,而是在觸發CLICK事件時,才上傳到服務器

解决方案 »

  1.   

    adoquery1.append是将连接好的数据新增并提交到数据库!
    建议LZ:使用动态机制
      

  2.   

    如果是三层结构就可以~
    ClientDataSet有缓存机制
      

  3.   

    三层或非三层都可以,以下是在Delphi7+Windowsxp3环境下分别用adoquery和adotable控件实现的,如下我写的Demo:
    //前提是将adotable和adoquery Cursor Type :ctstatic和LockType:ltBatchOptimistic
    1.adotable+dbgrid demo:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls;type
      TForm1 = class(TForm)
        ADOTable1: TADOTable;
        DataSource1: TDataSource;
        ADOConnection1: TADOConnection;
        DBGrid1: TDBGrid;
        Button1: TButton;    procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      ADOTable1.UpdateBatch(arAllChapters);
    end;end.2.1.ADOQuery+cxgrid demo:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
      cxDataStorage, cxEdit, DB, cxDBData, cxGridLevel, cxClasses, cxControls,
      cxGridCustomView, cxGridCustomTableView, cxGridTableView,
      cxGridDBTableView, cxGrid, ADODB, StdCtrls;type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        cxGrid1DBTableView1: TcxGridDBTableView;
        cxGrid1Level1: TcxGridLevel;
        cxGrid1: TcxGrid;
        DataSource1: TDataSource;
        cxGrid1DBTableView1Column1: TcxGridDBColumn;
        cxGrid1DBTableView1Column2: TcxGridDBColumn;
        cxGrid1DBTableView1Column3: TcxGridDBColumn;
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
    begin
      ADOQuery1.Append;
      //AppendRecord([nil,'aaa','bbb']);
      //ADOQuery1.AppendRecord(['123','234','bbb']);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      ADOQuery1.UpdateBatch(arAllChapters);
    end;end.
      

  4.   


    将   adoquery 的 locktype 设置 ltbatch.. 缓存下。
      

  5.   

    有用了缓存机制,但是ADOQUERY1.APPEND的时候虽是缓存在本地的ADOQUERY里面,但是我要在缓存的时候可以允许单元格有为空的现象,一旦“保存”数据传入数据库,就要判断是否有为空的现象,有的话就要提示,不可保存入数据库。在ADOQUERY里面的BeforePost事件里面去写的话,缓存的时候就不允许单元格为空的现象了,该怎么解决。
      

  6.   

    如此,建议可以在最终提交的时候检查空字段,而不要写到BeforePost事件。有存在空字段,aborv
      

  7.   

    現在問題點是出在當上傳本地時他也會執行BeforePost裡面的事件。我是想要在上傳本地時不執行任何事件,而當上傳SQL SERVERR 時,用BeforePost來判斷是否為空,為空的話,就無法執行保存。
      

  8.   

    你不是說是在Click時執行嗎?就可以在Button Click時去判斷是否為空呀.