If Key=Chr(VK_RETURN) then With DBGrid1 do begin If SelectedIndex < (FieldCount - 1) Then SelectedIndex := SelectedIndex + 1 Else Begin SelectedIndex := 0; With AdoTable1 do Begin Next; If EOF then Last; end; end; end;
o ,忘了说一句: 当Edit按回车时,先把Edit的内容赋值给当前位置的Cell, 再下一个输入地方SetFocus。
http://www.cnkernel.com/wncx.rar 是个好例子!!!
在 dbgrid的onkeypress 中写代码就行了。 我这边 正好有这样的代码,就ctrl c,ctrl v 给你啦。呵。 procedure Trcsgxt_pf.DBGridEh1KeyPress(Sender: TObject; var Key: Char); begin if key=#13 then begin if (dbgrideh1.SelectedField.FieldName='BZ') and (data.q2.State in[dsedit,dsinsert]) then begin dbgrideh1.SelectedIndex:=0; //如果是在最后一个字段按回车 则跳到下一行。 data.q2.Append; end; if (dbgrideh1.SelectedField.FieldName='DW') and (data.q2.State in[dsedit,dsinsert]) then begin DBGRIDEH1.SelectedIndex:=5; //定位到 索引号为5的那个 字段。 end; if (dbgrideh1.SelectedField.FieldName='DM') and (data.q2.State in[dsedit,dsinsert]) then begin //商品编码的检索,检索到了,就在各个相关栏目输入值。 没检索到 就提示没有该种商品。 with data do begin if dbgrideh1.Selectedfield.Text='' then exit; cx.Close; cx.SQL.Clear; cx.SQL.Add('select * from kc_dm where dm=:dm and ckdm=''07'''); cx.Parameters[0].Value:=dbgrideh1.SelectedField.Text; cx.Open; if not cx.Eof then begin if cx.FieldByName('mc').AsString<>'' then begin dbgrideh1.Fields[1].Value:=cx.FieldValues['mc']; //给商品名称 赋值。 end; if cx.FieldByName('note').AsString<>'' then begin dbgrideh1.Fields[4].Value:=cx.FieldValues['note'] //给商品备注信息赋值。 end; if cx.FieldByName('chlb').AsString='01' then begin dbgrideh1.Fields[2].Value:='染料'; //给商品类别赋值。 end else if cx.FieldByName('chlb').AsString='02' then begin dbgrideh1.Fields[2].Value:='助剂'; end; end else begin dbgrideh1.Fields[2].Value:=''; dbgrideh1.Fields[1].Value:=''; dbgrideh1.Fields[4].Value:=''; dbgrideh1.Fields[3].Value:=0; dbgrideh1.SelectedIndex:=0; showmessage('库中无该配方'); //提示没有需要 查找的东西。 exit; end; dbgrideh1.Fields[0].Value:=dbgrideh1.SelectedField.Text; DBGRIDEH1.SelectedIndex:=3; //定位到下一个字段。 end; end; end; end;
With DBGrid1 do
begin
If SelectedIndex < (FieldCount - 1) Then
SelectedIndex := SelectedIndex + 1
Else
Begin
SelectedIndex := 0;
With AdoTable1 do
Begin
Next;
If EOF then Last;
end;
end;
end;
检索条件就是你的商品的编码
然后用dbgrid刷新就可以了啊
具体实现的机制我想都差不多
要根据你问题具体分析
方个Edit控件在上面,在Edit的OnChange事件里面来根据它的.text变化来检索数据库里面相对应的商品名称,当Edit按回车是,下一个输入地方SetFocus.
呵呵!!!! http://www.cnkernel.com/wncx.rar
当Edit按回车时,先把Edit的内容赋值给当前位置的Cell, 再下一个输入地方SetFocus。
是个好例子!!!
我这边 正好有这样的代码,就ctrl c,ctrl v 给你啦。呵。
procedure Trcsgxt_pf.DBGridEh1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
if (dbgrideh1.SelectedField.FieldName='BZ') and (data.q2.State in[dsedit,dsinsert]) then
begin
dbgrideh1.SelectedIndex:=0; //如果是在最后一个字段按回车 则跳到下一行。
data.q2.Append;
end;
if (dbgrideh1.SelectedField.FieldName='DW') and (data.q2.State in[dsedit,dsinsert]) then
begin
DBGRIDEH1.SelectedIndex:=5; //定位到 索引号为5的那个 字段。
end;
if (dbgrideh1.SelectedField.FieldName='DM') and (data.q2.State in[dsedit,dsinsert]) then
begin
//商品编码的检索,检索到了,就在各个相关栏目输入值。 没检索到 就提示没有该种商品。
with data do
begin
if dbgrideh1.Selectedfield.Text='' then exit;
cx.Close;
cx.SQL.Clear;
cx.SQL.Add('select * from kc_dm where dm=:dm and ckdm=''07''');
cx.Parameters[0].Value:=dbgrideh1.SelectedField.Text;
cx.Open;
if not cx.Eof then
begin
if cx.FieldByName('mc').AsString<>'' then
begin
dbgrideh1.Fields[1].Value:=cx.FieldValues['mc']; //给商品名称 赋值。
end; if cx.FieldByName('note').AsString<>'' then
begin
dbgrideh1.Fields[4].Value:=cx.FieldValues['note'] //给商品备注信息赋值。
end; if cx.FieldByName('chlb').AsString='01' then
begin
dbgrideh1.Fields[2].Value:='染料'; //给商品类别赋值。
end
else if cx.FieldByName('chlb').AsString='02' then
begin
dbgrideh1.Fields[2].Value:='助剂';
end;
end
else
begin
dbgrideh1.Fields[2].Value:='';
dbgrideh1.Fields[1].Value:='';
dbgrideh1.Fields[4].Value:='';
dbgrideh1.Fields[3].Value:=0;
dbgrideh1.SelectedIndex:=0;
showmessage('库中无该配方'); //提示没有需要 查找的东西。
exit;
end;
dbgrideh1.Fields[0].Value:=dbgrideh1.SelectedField.Text;
DBGRIDEH1.SelectedIndex:=3; //定位到下一个字段。
end;
end;
end;
end;
能不能把例子给我传过来一份呀,我想看一下,好吗?
自己根据自己的实例试一下就知道 行不行了。
自己再修改优化一下