当在dbgrid中按下down键时。  
 
默认增加一空行。  此时在输入的时候还没有post;  
   
怎样取得输入的字符。  
 
不在onkeypress,事件中取,不在onkeydown中取。  
 
怎样做。http://expert.csdn.net/Expert/TopicView2.asp?id=1511992还没有post;,此时无论你通过怎样取数据源的值,是取不出来的。
Column[0].dispytext, fieldbyname('field').asstring.
dbgrid1.Fields(0).Value 
DBGrid1.SelectedField.AsString 
像这些方法都无效。我要实模糊查找功能。在列的下面显示另外一个过滤框. 现在就是取不出输入的字符.  解决此题300分不要看题目简单,注意了。

解决方案 »

  1.   

    通常我的做法是:用一个内存表控件[www.playicq.com下载]然后对内存标进行操作!
      

  2.   

    不区分内存表和普通表。内存表只是速度上的优势,在内存执行
    比如RxMemoryData1,
    这个组件。反正都是表。
     对内存表也是同样的结构。
      

  3.   

    试试看
    if DBGrid1.ControlCount>0 then
      Form1.Caption :=  TInplaceEdit(DBGrid1.Controls[0]).Text;
      

  4.   

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

  5.   

    to  ohmygod(我的天啊)能解释一下吗?你的方法可以取出来.
    if DBGrid1.ControlCount>0 then //什么意思TInplaceEdit(DBGrid1.Controls[0]).Text; //什么意思
      

  6.   


    我猜测DBGrid输入的原理是在该表元位置上建立一TInplaceEdit类的Control,然后通过该InplaceEdit输入内容,再传入DBGrid1对应的表元里。if DBGrid1.ControlCount>0 then//是判断是否进入输入状态,一般情况下DBGrid内包含的Controls数为0,当进入输入状态时,DBGrid会创建TInplaceEdit类的Control用于输入,所以DBGrid的Control数会增一,当不在输入状态时,则会等于原Control数。
    TInplaceEdit(DBGrid1.Controls[0]).Text //由上面可知,当处于输入状态时,DBGrid的第一个Control为输入框,不过DBGrid.Controls[0]返回的为TControl的对象,可进行强制转换成TInplaceEdit进行处理。不过,有件需要注意的事是,当在DBGrid中动态创建组件,是否会使该输入框在DBGrid.Controls中对应的位置发生变化,我倒是没有去试过。不过,如果是会的话,可再进行适当处理。