请问一个delphi 中dbgrid 控件的问题……………我的一个用dbgrid 的数据输入画面 .其中新增﹐修改﹐删除数据是用button按钮控件﹐只用dbnavigator 控件的四个记录移动控件 ﹐但现在有一个问题﹐就是
Dbgrid ﹐对于上下移动光标键﹐能隐含的调用post , 这就不受我的存储按钮控制了 ﹐很是麻烦﹐不知如何解决 ﹐即 当我按下新增或修改按钮时 ﹐adotable.insert , 如何控件dbgrid 的当前行不移动 .又且当我按<存储>存盘后 ﹐移动上下行﹐不自动新增新增﹐总知一句话﹐
Dbgrid 上的数据变更全由 我本身的几个按钮来按制 ﹐不需要dbgrid 隐式的调用.. 应如何做呢 ?急请高手解决……………..

解决方案 »

  1.   

    请高手讲解啊。
    现在应确定的是﹐当改变dbgrid的当前行时﹐该控件是在哪个事件中引发的 ﹐如果发现行到了dbgrid的尾部﹐就自动post ﹐然后insert 一笔。如果知道了dbgrid 控件这个事件﹐就像如何来防止该事件发生﹐或在引发该事件前﹐先判断该用户是否有新增的权限﹐
      

  2.   

    用updatebatch
    procedure TForm1.Button1Click(Sender: TObject);
    Var //book:Tbook;
       Query:tADOQuery;
       code:String;
    begin
       Query:=TADOQuery.Create(self);
       Query.Connection:=ADOConnection1;
       ADOQuery1.Last;   with Query do
       begin
          Close;
          Sql.Clear;
          Sql.Add('select max(fvcode)+1 as maxcode from basicdata_dept where fiparentID='+IntToStr(1));
          Open;
          code:=fieldbyname('maxcode').AsString;
       end;
       ADOQuery1.Append;
       ADOQuery1.FieldByName('fvcode').AsString:=Code;
       DBGridEH1.SetFocus;
       tDrawGrid(DBGridEH1).Col:=2;end;procedure TForm1.Button2Click(Sender: TObject);
    begin
     buttsave;
    end;procedure TForm1.ButtSave;
    Var book:Tbook;
    begin
       ADOQuery1.Last;
       book:=ADOQuery1.GetBook;
       if ADOQuery1.FieldByName('fvname').IsNull then
       begin
         showmessage('不能为空');
         abort;
         exit;
       end;
       if adoquery1.BookValid(book) then
          adoquery1.GotoBook(book);
       try
     //     if (ADOQuery1.State=dsEdit) or (ADOQuery1.State=dsInsert) then
             adoquery1.UpdateBatch();
       except
          adoquery1.Cancel;
       end;
    end;procedure TForm1.ADOQuery1AfterPost(DataSet: TDataSet);
    begin
       buttsave;
    end;procedure TForm1.DBGridEh1ColExit(Sender: TObject);
    begin
       if adoquery1.FieldByName('fvname').IsNull then
       begin
         showmessage('11111111不能为空');
         abort;
         exit;
       end;
    end;procedure TForm1.DBGridEh1Columns2UpdateData(Sender: TObject;
      var Text: String; var Value: Variant; var UseText, Handled: Boolean);
    begin
       if text='' then
       begin
        showmessage('2222222不能为空');
        abort;
        exit;
       end;
    end;procedure TForm1.Button3Click(Sender: TObject);
    var //book:tbook;
       // sid:Integer;
        adoquery:tadoquery;
    begin
          adoquery:=tadoquery.Create(self);
          adoquery.Connection:=adoconnection1;
          //sid:=;
          if adoquery1.FieldByName('id').AsString='' then
             adoquery1.Delete
          else
          begin
             if Application.MessageBox('删除后不能恢复,是否确定删除?','提示',MB_OkCancel+MB_ICONINFORMATION)=IDOK then
             begin
                adoquery1.Delete;
               { with adoquery do
                begin
                   close;
                   sql.Clear;
                   sql.Add('delete from basicdata_dept where id='+IntToStr(adoquery1.FieldValues['id']));
                   execsql;
                end;}
             end;
             adoquery1.Prior;
             adoquery1.Close;
             adoquery1.Open;
          end;end;