如果光标在第二列时,输入数据(ID)按回车键后,根据第二列的内容从表2中将具有此(ID)的数据自动填到第三列中,如何实现?
计算字段或查询字段在DBGRID中编辑数据,如果光标所在的列不是最后一列,按回车键后,光标就跳到下一列,如果是最后一列则插入一条记录,光标跳到下一行的第二列,如何实现?
keypress or keydown 事件中
postmessage TAB事件
计算字段或查询字段在DBGRID中编辑数据,如果光标所在的列不是最后一列,按回车键后,光标就跳到下一列,如果是最后一列则插入一条记录,光标跳到下一行的第二列,如何实现?
keypress or keydown 事件中
postmessage TAB事件
if key=13 then
begin
k:=dbgrid1.SelectedIndex;
if k<dbgrid1.FieldCount-1 then
begin
// 如果光标在第二列时(K=2),根据第二列的内容,将另一个表中ID等于第二列
// 内容的另一项赋给第三列;
dbgrid1.Fields[k+1].FocusControl; //光标为什么不能跳到下一列?
end;
else
begin
query1.insert;
dbgrid1.Fields[0].ReadOnly:=false;
dbgrid1.Fields[0].asstring:=edit1.text;
dbgrid1.Fields[0].ReadOnly:=true;
dbgrid1.Fields[1].FocusControl;
end;
var
iYear1,iMonth1,iDay1:word;
formdate,enddate:tdatetime;
zydc,zydm:string;
yhbhao:integer;
begin
case dbgrid1.SelectedIndex of
7:begin with Query1 do
begin
close;
sql.clear;
sql.add('select count(*),max(yhb_hao) from yhb');
sql.add('where yhb_shoufu=:hao');
parambyname('hao').asstring:=fmcenter.Queryyhb.fieldbyname('yhb_shoufu').asstring;
if not prepared then
prepare;
try
open;
except
showmessage('无法求出最大收付号');
exit;
end;
liu:=fields[0].asinteger;
yhbhao:=fields[1].asinteger;
end;
if liu<=0 then
begin
with Query2 do
begin
close;
sql.clear;
sql.add('select max(yhb_hao) from yhbtotal');
sql.add('where yhb_zhang=:name and yhb_date>=:be and yhb_date<=:ed and yhb_shoufu=:hao');
parambyname('name').asstring:=zbname;
parambyname('be').asdatetime:=formdate;
parambyname('ed').asdatetime:=enddate;
parambyname('hao').asstring:=fmcenter.Queryyhb.fieldbyname('yhb_shoufu').asstring;
if not prepared then
prepare;
try
open;
except
showmessage('无法求出最大收付号');
exit;
end;
yhbhao:=fields[0].asinteger;
end;
end;
if fmcenter.queryyhb.State in [dsedit,dsinsert] then
fmcenter.Queryyhb.fieldbyname('yhb_hao').asinteger:=yhbhao+1;
end;
5: begin
zydm:=fmcenter.queryyhb.fieldbyname('yhb_zhaiyao').asstring;
with fmcenter.table5 do
begin
if locate('zy_number',zydm,[]) then if FMCENTER.Queryyhb.state in [dsedit,dsinsert] then
fmcenter.Queryyhb.fieldbyname('yhb_zhaiyao').asstring:= fieldbyname('zy_nr').asstring;
end;
end;
8: begin
if fmcenter.queryyhb.fieldbyname('yhb_shouri').asstring='' then
begin
if fmcenter.querysetup1.fieldbyname('xj_zijinlai').asboolean then
dbgrid1.Columns[16].visible:=false;
if fmcenter.querysetup1.fieldbyname('xj_zijinlailei').asboolean then
dbgrid1.Columns[17].visible:=false;
end
else
begin
if fmcenter.querysetup1.fieldbyname('xj_zijinlai').asboolean then
dbgrid1.Columns[16].visible:=true;
if fmcenter.querysetup1.fieldbyname('xj_zijinlailei').asboolean then
dbgrid1.Columns[17].visible:=true;
end;
end;
9: begin
if fmcenter.queryyhb.fieldbyname('yhb_fuchu').asstring='' then
begin
if fmcenter.querysetup1.fieldbyname('xj_zijinrong').asboolean then
dbgrid1.Columns[18].visible:=false;
if fmcenter.querysetup1.fieldbyname('xj_ronglei').asboolean then
dbgrid1.Columns[19].visible:=false;
end
else
begin
if fmcenter.querysetup1.fieldbyname('xj_zijinrong').asboolean then
dbgrid1.Columns[18].visible:=true;
if fmcenter.querysetup1.fieldbyname('xj_ronglei').asboolean then
dbgrid1.Columns[19].visible:=true;
end;
end;
19 :begin
zydm:=fmcenter.queryyhb.fieldbyname('yhb_rongtuleibie').asstring;
if fmcenter.table6.locate('rt_number',zydm,[]) then
zydc:=fmcenter.table6.fieldbyname('rt_number').asstring;
if FMCENTER.Queryyhb.state in [dsinsert,dsedit] then
fmcenter.Queryyhb.fieldbyname('yhb_rongtuleibie').asstring:=fmcenter.table6.fieldbyname('rt_name').asstring;
end;
end;
end;
在dbgrid1.keypress 事件中加入:
if key=#13 then
begin
key=#0;
postmessage(activecontrol.handle,WM_keydown,vk_tab,0);
end;
2.
在table.afterinsert事件中加入:
dbgrid1.selectedindex:=1;
3.
在DBGrid1ColExit事件中查询、赋值。
if key=13 then
begin
key:=9;
abort;
edit;