我要在dbgrid 中响应向下、向上的按键,在onkeydown中写了相应的代码,希望在按键时记录先下移(上移)一条,然后再从新记录中取值做条件进行查询,但是现在查询可以实现,只是查询到的记录却是以上一条记录相应值为条件的,也就是说,是先查询再记录移动了,请问怎么实现先移动记录再执行查询代码???
解决方案 »
- 高手请进,为什么可执行文件在xp系统下能够运行,换在win2000下就不能够运行了呢?顶者有分~~
- delphi搞得webservice连接数〉1000后的问题
- 再次感谢 constantine(飘遥的安吉儿) !
- 线程的小问题,高手请进!!!!!
- help~!
- DELPHI初学者有什么好书推荐吗?
- 如何在多个数据库中查询数据
- Tstringgrid中如何使某些编辑框显示灰色无法操作
- 帮小弟找工作!delphi两年的使用者!吹牛捣乱的不要进!(委屈以下 吧)
- 在DELPHI上有没有判断变量是否为数值型的函数、方法。
- 20分求 ﹕如何列举出dbctrlgrid 里的域对象
- 一个调用存储过程等待的问题.
(因为我使用的是frame,而且是动态创建的,所有frame在创建时的实例名均为FFrame,不容易实现你所说的代码)
//dbgrid响应回车
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then { 判断是按执行键}
if (ActiveControl is TDbgrid) Then{是在 TDbgrid 控件内}
begin
With TDbgrid(ActiveControl) Do
begin
if not DataSource.DataSet.Eof then
DataSource.DataSet.Next
else
DataSource.DataSet.First;
end;
end;
end;
写查询代码并操作界面控件应该没区别啊
你只需在QUERY1的AFTERSCORALL事件中写你的查询代码。就可以了。因为你在DBGRID事件中移动记录后才会触发QUERY1的AFTERSCORALL事件。这样应该完全符合你的要求呀
with TDBGrid(Sender).DataSource.DataSet do
begin
case Key of
VK_UP:
begin
if not BOF then
begin
Prior;
//get condition and to search...
end;
end;
VK_DOWN:
begin
if not BOF then
begin
Next;
//get condition and to search...
end;
end;
end;
end;
在keydown里写:
with DBGrid1.DataSource.DataSet do
begin
case Key of
VK_UP:
begin
if not BOF then
begin
Prior;
dbgrid1.SelectedIndex:=dbgrid1.SelectedIndex-1;
end;
end;
VK_DOWN:
begin
if not EOF then
begin
Next;
dbgrid1.SelectedIndex:=dbgrid1.SelectedIndex+1;
end;
end;
end;
end;这样可以满足你的要求吧?你的要求是达到这样的效果吗?