当在dbgrid中按下down键时。默认增加一空行。 此时在输入的时候还没有post;
 
怎样取得输入的字符。不在onkeypress,事件中取,不在onkeydown中取。怎样做。

解决方案 »

  1.   

    如果直接取数据源的值。将是空值,因为还没有提交post;该怎样得到刚才在某列输入的值。
      

  2.   

    注意,当输入的时候,这个时候数据还没有提交。怎么能用field[0].value
    来取值呢?>
    此时的值在表字段是 null值.只有提交后才能取表里的值。没提交前怎样得到输入的值。
      

  3.   

    to 楼主,DBGrid1.Fields[0].Value 或 DBGrid1.SelectedField.Value取的都是DBGrid1中的值,跟提不提交没有关系的,是能取得到的。你试试就知道了。
      

  4.   

    dbgrid.dataset.fieldByname('fieldName').asstring
      

  5.   

    to sysu(死树)
    当在dbgrid按下down键时,自动增加一空行.
    你在一个dbgrid的某一列输入值的时候,此时焦点,光标都停留在这一列。你能在一边输一边showmessage('输入的字符串')显示出来吗?如果能显示出来问题就解决了。
    分就全给你.
      

  6.   

    你试一下就知道了。 我试了一上午,不知道在哪个事件里能得到输入的字符。
    (是全部串)不是单个。 是单个的在onkeypress可以抓得到。
      

  7.   

    用dbedit,在没有post前,可以用dbedit1.text来获取某一格的内容。
      

  8.   

    不用dbedit,edit。其它数据感知组件,就用dbgrid.
      

  9.   

    指定字段的OnChange事件里写//先加入字段列表,再编辑指定字段的OnChange,如Name字段procedure TForm1.Table1NameChange(Sender: TField);
    begin
      showmessage('ddd');
    end;DataSource的OnDataChange事件procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
    begin
      if Field=table1.FieldByName('name') then
      showmessage('dd');
    end;
      

  10.   

    楼上的方法也不起作用。各位还是没有看清我的题目。当在dbgrid按下down键时,自动增加一空行.
    你在一个dbgrid的某一列输入值的时候,此时焦点,光标都停留在这一列。你能在一边输一边showmessage('输入的字符串')显示出来吗?如果能显示出来问题就解决了。
    注意,此时焦点并没有离开column[0]位置。 一离开就可以抓到这串字符。我要实模糊查找功能。在列的下面显示另外一个过滤框. 现在就是取不出输入的字符.
     
      

  11.   

    to 楼主:
      要在当前输入的Cell不处于编辑状态时(不一定Post)才能取到,比如输入时,按回车
    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then
        Caption := DBGrid1.SelectedField.AsString;
    end;
    或者按Button1
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage(DBGrid1.SelectedField.AsString);
    end;
      

  12.   

    我知道,只要焦点一离开此colum[0]列,就可以取出,但我要的不是这种结果。我要实模糊查找功能。在某列输入的时候,根据输入的字符串过滤条 一些记录出来.
    在列的下面显示另外一个过滤框. 现在就是取不出输入的字符.
      

  13.   

    再次 to 楼主:既然您规定了:不在onkeypress,事件中取,不在onkeydown中取。我想在数据集上解决不了您的问题,不妨说明您的实际用途,来判断一下是否合理,也许可以转换一种方式
      

  14.   

    或者如果能这种方法,也可以。但也遇到一个问题。
    就是
    当在dbgrid,按下down键,到最后,自动增加一空行。为什么焦点一离开该行。自动cancel了呢?怎样让离开焦点,但不cancel;
      

  15.   

    to renzhm(戴尔飞) ( )就算是在onkeypress中取,怎么取。是不是一个字符一个连接起来这样。用个变量.
      

  16.   

    在Dataset 控件的BeforePost事件上取:
    例如, 数据表有个字段为UserID:
    procedure TForm1.ADODataSet2BeforePost(DataSet: TDataSet);
    begin
      showmessage(DataSet.FieldByName('UserID').AsString);
    end;
      

  17.   

    用如下方法可以,在KeyUp中取。
    缺点:输入中文时不行,拷贝粘贴时也不行,必须再按一下键能触发KeyUp的。
    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if DBGrid1.Tag = 1 then begin Key := #0; Exit; end;
      DBGrid1.Tag := 1;
      keybd_event(VK_RETURN, 0, 0, 0);
      keybd_event(VK_RETURN, 0, 2, 0);
    end;procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      DBGrid1.Tag := 0;
      Form1.Caption := DBGrid1.SelectedField.AsString;
    end;
      

  18.   

    to 各位。问题解决了。 谢谢各位.
    谢谢 sysu(死树) .你的方法我没试。但下面的方法可以。
     ohmygod(我的天啊)写的.
    if DBGrid1.ControlCount>0 then //什么意思TInplaceEdit(DBGrid1.Controls[0]).Text; //什么意思
    这两句能取出来,但不知什么意思。