我的grid与ADOQuery相联,假设字段F1,我在ADOQueryF1的onchanage中写上代码:
if (Tfield(Sender).asstring<>'') then
begin
      Tfield(Sender).asstring:=
        leftstr(trim(Tfield(Sender).asstring),length(trim(Tfield(Sender).asstring))-1);
      TCustomEdit(Sender).SelStart := length(trim(Tfield(Sender).asstring));
end;
但是它要在我按下回车后才执行,我希望它每当我键入一个值的时候就执行应该写在哪里或者,还应该加些什么代码。
先行谢过:)

解决方案 »

  1.   

    按下回车才会提交到ADOQuery中,看来你只有在DBGrid的OnKeyPress或OnKeyDown事件里处理了
      

  2.   

    是啊,按下回车才提交,那我即便是在OnKeyPress里写,我又怎么得到字段的这个还没按回车之前的值呢,用adoquery.fieldbyname('f1').asstring是取不到的呀
      

  3.   

    以前我做过类似的东西,忘了具体怎么实现的了,好像是用了DataSource的OnDataChange事件,你试试吧,不过容易造成死循环,控制的时候小心一些,如果其他人有什么更好的方法,请写一下,学习学习:)
      

  4.   

    写在datasource的afterscroll事件里,你试试
      

  5.   

    在DBGrid的OnKeyPress或OnKeyDown事件里处理
    回车的键值为#13
      

  6.   

    procedure TFrm_OF_EqType.GridKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      inherited;
      if (AdoQry.FieldByName('EQ_MAX_CBM').asstring<>'') and
          (strtofloat(AdoQry.FieldByName('EQ_MAX_CBM').asstring) > 99.999) then
        begin
          AdoQry.FieldByName('EQ_MAX_CBM').asstring:=
            leftstr(trim(AdoQry.FieldByName('EQ_MAX_CBM').asstring),length(trim(AdoQry.FieldByName('EQ_MAX_CBM').asstring))-1);
        end;
    end;我照样可以在表格中输入999999....
    用什么方法可以得到表格中当前栏的值呢,因为按回车之前里的值根本没变
    所以我那个:
    AdoQry.FieldByName('EQ_MAX_CBM').asstring:=
            leftstr(trim(AdoQry.FieldByName('EQ_MAX_CBM').asstring),length(trim(AdoQry.FieldByName('EQ_MAX_CBM').asstring))-1);
    它根本没执行的
      

  7.   

    TDbGrid的col与row是protected不能直接使用,得不到当前栏的值,可以把它强制转换为TDrawGrid或TGrid后得到当前栏的值
    如:TGrid(DbGrid1)
      

  8.   

    请问cslegend() :
    还是不知道该怎么写,假设我有字段F1
    怎么得出当前栏的值呢
    TGrid(grid)通不过
    能不能写个例子看看,太菜了,谢谢:)