在Field的OnChange事件中,想控制DBGrid的焦点,为何没效果?(50分)

  • 主题发起人 主题发起人 Puff
  • 开始时间 开始时间
P

Puff

Unregistered / Unconfirmed
GUEST, unregistred user!
我的目的是,当用户在DBGrid中输入数据时,我在对应Field的OnChange事件中校验,如果
校验没通过,就让焦点返回这一列。代码如下:
procedure TdmCPMS220.tblAt_Shipping_LTVENDOR_IDChange(Sender: TField);
begin
if not tblVender.Locate('Vendor_ID',VarArrayOf([Sender.AsString]),[]) then
begin
ShowMessage('Wrong');
dbgrdAt_Shipping_LT.SelectedIndex := 0;
dbgrdAt_Shipping_LT.SetFocus;
end;
end;
 
OnChange事件发生时,数据集(tblVender?)处在编辑状态,
如果你调用Locate等使数据集的记录指针移动,则自动执行
了Post,所以就不是你要的结果了。
 
这个我也知道,可问题是,我没有移动指针,只是在同一行的不同列中移动,也还是不行。
 
记录当前的recno值,onchange时加一个判断就行了。
 
楼上那位可能没理解我的意思,我现在的问题不是在不同行之间定位,而是在同一行的
不同列间定位
 
在OnValidate中写这些代码,会陷入死循环
 
DBGRID与表联系后,会自动验证输入的正确性的,假如不合格,那么
就保存不了的
 
各位,我知道了解决办法:
procedure TdmCPMS220.tblAt_Shipping_LTVENDOR_IDValidate(Sender: TField);
begin
if not tblVender.Locate('Vendor_ID',VarArrayOf([Sender.AsString]),[]) then
begin
ShowMessage('Wrong');
abort;
end;
end;
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
871
DelphiTeacher的专栏
D
D
回复
0
查看
930
DelphiTeacher的专栏
D
D
回复
0
查看
945
DelphiTeacher的专栏
D
后退
顶部