1.dbgrid 每隔几行向表中保存一次,比如,我dbgrid中有三条记录,我要在第二行,换行时,
把前两条记录,保存到一个表中,表中在保存以前是空的,
2.dbgrid 单元格换格时,触发一个存储过程或者sql语句,来校验这个字段,
  实现效果比如,dbgrid中有个shl(数量)字段,shl后有一个dj(单价) 字段
 当输完shl后,如果校验成功,光标便转入dj字段中,否则停在该字段,
3,dbgrid 光标跳入指定字段,实现效果:dbgrid 中有 spmch(商品名称),shpgg(商品规格),shpcd(产地),shl(数量),dj(单价)实现 效果,:光标从spmch中跳入shl中,如果输入数量正确,直接跳转到第二行,开始第二行,数据录入--------------------------------------------------------------------
                    以上这三个问题是在 实际操作过程中最常用到的功能 ,请各们高手帮忙解决,提供一下思路,,小
                        小弟分数有限,还请各位大可包涵,如问题回答的好,另有分数相送

解决方案 »

  1.   

    还有个问题,顺便问问,
    如 dbgrid  有数据库字段 
    shl (数量),dj(单价) ,je(金额)
    不论,shl这个字段处于什么位置,
    如,dj,shl ,je 
    或者
    dj ,je ,shl
    我想通过,shl 这个字段名来得到,他在dbgrid所处的列号(处在第几列)
      

  2.   

    1.在dbgrid的OnKeyPress事件里写代码实现,参考代码
    procedure TForm1.DBGrid2CellClick(Column: TColumn);
    var
      i,j:Integer;
    begin
      self.vg_fieldname:=Column.FieldName;
      self.vg_fieldindex:=column.index;
      self.vg_row:=self.dbgrid2.datasource.dataset.recno;
    end;procedure TForm1.DBGrid2KeyPress(Sender: TObject; var Key: Char);
    var
      i,j,m,n:Integer;
    begin
      if key=#9 then//tab键换行
      begin
        if self.vg_filedindex=dbgrid2.columns.count-1 then//最后一列
        begin
          for i:=1 to self.vg_row do
          begin
            //将此表中记录写入另一张表中
          end;
        end;
      end;
    end;
      

  3.   

    2.在dbgrid的OnKeyDown事件里写代码实现,参考代码
    procedure TForm1.DBGrid2KeyDown(Sender: TObject; var Key: Char); begin 
      if key=9 then//tab键换行 
      begin 
        if ...  then//字段输入值检验错误
          key:=0; 
      end; 
    end;
      

  4.   

    3.参考代码procedure TForm1.DBGrid2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if Key=9 then
      begin
        if self.DBGrid2.SelectedIndex=1 then
          self.DBGrid2.SelectedIndex:=3
      end;
    end;你把这三个组合一下就能实现你要的效果
      

  5.   

    4.最后一个问题,参考代码i:= self.DBGrid2.DataSource.DataSet.FieldList.IndexOf('shl');