1.比如我在DBGrid1的第一列(A列)单元格,输入"1001"后回车,跳到第二行的第一列(A列)单元格,继续输入"1002",回车....;
2.同样当鼠标点击DBGrid1的第二列(B列)单元格输入"小五"后回车,跳到第二行的第二列(B列)单元格,继续输入"小六",回车....;
请问各位大侠在procedure TFrmPiandeng.DBGrid1KeyDown 事件里如何代码啊?
TKS!!!
2.同样当鼠标点击DBGrid1的第二列(B列)单元格输入"小五"后回车,跳到第二行的第二列(B列)单元格,继续输入"小六",回车....;
请问各位大侠在procedure TFrmPiandeng.DBGrid1KeyDown 事件里如何代码啊?
TKS!!!
直接在DBGrid中录入数据时,录入完一个字段后需要用TAB键转入下一个字段,而我们通常的输入习惯是输入完毕按回车键,下面这段代码可实现用回车键代替TAB键,例子代码如下:首先把Form1的KeyPreview属性设为True,编写窗体的KeyPress事件代码,procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);beginif key=#13 then if not (ActiveControl is TDbgrid) Then//不是DBGrid组件Begin key:=#0; perform(WM_NEXTDLGCTL,0,0);end elseif (ActiveControl is TDbgrid) Then//是Dbgrid组件beginWith TDbgrid(ActiveControl) Doif Selectedindex<(FieldCount-1) thenSelectedindex:=Selectedindex+1else Selectedindex:=0;end;
就是在DBGrid1的第一列(A列)单元格,输入"1001"回车后,光标就跳到了DBGrid1的第二列(B列)单元格了,在第二列(B列)的回车正常,但是在第一列(A列)单元格和其它列如C、D、E列等等输入后回车,光标又总是跳到第二列(B列)上了。
为什么这样啊??大家帮改改下面的代码。TKS!procedure TFrmPiandeng.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if key=13 then
begin
DBGrid1.DataSource.DataSet.Append;
DBGrid1.SelectedIndex :=0;
DBGrid1.SetFocus;
end;
end;
Shift: TShiftState);
begin
if Key=13 then key:=9;
end;
因为DBGrid1.SelectedIndex :=0;
接向的就是A列。
2.在B列上的回车是正常的,光标可以往B列的下一行跳,但是在C列上回车时,光标又跳到B列了,怪不怪啊.
begin
If key=chr(VK_RETURN) then
with AdoTable1 do //DBGrid1显示的是AdoTable1中的数据,也可以是AdoQuery
begin
Next;
If EOF then Last;
end;
end;
end;楼主,结贴吧!
procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if key=13 then
begin
//如焦点在第一列最后一行,则增加行,刷新数据并将焦点到最后行
if (dbgrid1.SelectedIndex=0) and (dbgrid1.DataSource.DataSet.Eof) then
begin
DBGrid1.DataSource.DataSet.Append;
dbgrid1.DataSource.DataSet.Post;
dbgrid1.DataSource.DataSet.Close;
dbgrid1.DataSource.DataSet.Open;
dbgrid1.DataSource.DataSet.Last;
end
else
//其他情况下移一行输入数据
begin
dbgrid1.DataSource.DataSet.Next;
end;
DBGrid1.SetFocus;
end;
end;
1.我在DBGRID1上的任一列(如A列)单元格输入数据,然后回车,跳到下一行的单元格(同时也增一行空行,同在A列上),而不是到了这一行的未尾才回车增加新行的.
2.例如:
ID NAME
1001 回车 小王 回车 //当输入完ID后,点击光标在NAME列上输入数据
光标跳到这里: 1002 回车 小六 回车 //也就是说在同一列上实现回车操作输入数据
.....同理 .....同理本人再加30分,请大家继续讨论好的方法.TKS!
Shift: TShiftState);
begin
inherited;
if key=13 then
begin
DBGrid1.DataSource.DataSet.Append;
DBGrid1.SelectedIndex :=0;
DBGrid1.SetFocus;
end;
end;
1.上面这几行代码,我在回车时增加一条空的记录,现在DBGrid1.SelectedIndex :=0;光标不是跳到A列啊,而是回车时光标接向了B列,真是奇怪????/
2.在B列上的回车是正常的,光标可以往B列的下一行单元格跳(正常),但是不管在C列或是D列上输入后回车时,光标又总跳到B列了(增加一新行),怪不怪啊.
为什么会这样???
DBGrid1.DataSource.DataSet.Next;
Shift: TShiftState);
begin
case Key of
VK_RETURN:
begin
if (key=VK_RETURN) and (dbgrid1.selectedindex<ADOQuery1.fieldcount-1) then
dbgrid1.selectedindex:=dbgrid1.selectedindex+1
else
if dbgrid1.selectedindex=ADOQuery1.fieldcount-1 then
begin
ADOQuery1.append;
dbgrid1.selectedindex:=0;
end;
end;
end;
end;
grjs2004(在岸边钓不到大鱼,只好下水去摸虾米!) 提供的方法也只能在A列上和输入回车后,光标跳到了B列上,但是在C列,D列等输入回车后,光标又往B列上跳了(新增加了一行)
谢谢两位的建议!TKS!
注意:
我现在的意思是在A列上纵向回车换行操作,而不是往下一格...NEXT之类的,列和行大家庭要分清.
例如:
(A列)
ID
1001 回车
光标跳到这里: 1002 回车
.....回车
.....同理 .....同理