当在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分不要看题目简单,注意了。
默认增加一空行。 此时在输入的时候还没有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分不要看题目简单,注意了。
比如RxMemoryData1,
这个组件。反正都是表。
对内存表也是同样的结构。
if DBGrid1.ControlCount>0 then
Form1.Caption := TInplaceEdit(DBGrid1.Controls[0]).Text;
例如, 数据表有个字段为UserID:
procedure TForm1.ADODataSet2BeforePost(DataSet: TDataSet);
begin
showmessage(DataSet.FieldByName('UserID').AsString);
end;
if DBGrid1.ControlCount>0 then //什么意思TInplaceEdit(DBGrid1.Controls[0]).Text; //什么意思
我猜测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中对应的位置发生变化,我倒是没有去试过。不过,如果是会的话,可再进行适当处理。