以下代码在delphi7.0地下调试通过,仅适合于DBGrid中的列与ADOQuery中的字段相互对应的情况
procedure TfrmPattern_Add.DBGridDetailKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
i: Integer;
begin
case Key of
VK_RETURN: //回车键
begin
if (DBGridDetail.SelectedIndex = ADOQryDetail.FieldCount) then //最后一列
Key:= VK_TAB
else
begin
i:= DBGridDetail.SelectedIndex;
if i + 1 < DBGridDetail.Columns.Count then //最后一列
Inc(I)
else i:= 0;
while(i <> DBGridDetail.SelectedIndex) and ((not DBGridDetail.Columns[i].Visible) or DBGridDetail.Columns[i].ReadOnly) do //跳过不可见列和只读列
begin
if i + 1 < DBGridDetail.Columns.Count then
Inc(i)
else i:= 0; //最后一列可见且非只读列
end; //while
if(i <= DBGridDetail.SelectedIndex) and Assigned(DBGridDetail.DataSource) and Assigned(DBGridDetail.DataSource.DataSet) then
DBGridDetail.DataSource.DataSet.Next; //如果是最后一列,datasource进入下一条记录
DBGridDetail.SelectedIndex:= i;
end; //else
end; //case Key of VK_RETURN
end; //case
end;