如果Dbgrid是与Table相连,请在Table的Column的OnSetText和OnValidate事件中处理。
1、在OnSetText中判断数据的合法性,如果不合法,在OnValidate处理(通过标志等)
2、抛出一个异常Raise,即可保证焦点不会丢失。
解决方案 »
- ShellExecute参数长度有限制吗?
- [DBNETLIB][ConnectionOpen (Connect()).]未找到指定的sql server。
- indy udpserver 封装在dll中,但是无法触发 UDPRead 接收事件!
- 小弟请教一个问题!
- 结合Delphi用RaveReports制作报表遇到的问题(急急急)
- Delphi7 rave 报表产生html格式的报表的问题
- 50分寻求InputBox()函数的用法.要求"ok","cancel"按钮能变成"确定","取消".
- 如何实现treeview条目的多选?
- delphi中使用opengl
- 本周话题(二),偶的算法、数据结构学的不好(数学差),除了数据库之外,还能作哪些开发方向?
- ADO ---->????数据库名称?????------>SQL Server
- 谁用ADOQuery执行过SQL语句:UPDATE?
DBGrid1.SetFocus;
DBGrid1.SelectedField :=
DBGrid1.DataSource.DataSet.FieldByName('你的字段名');
SendMessage(DBGrid1.Handle, WM_KEYDOWN, VK_F2, 0);
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
case DBGrid1.SelectedIndex of
0:if DBGrid1.DataSource.DataSet.Fields[0].value<>'我想要的值' then
于吗于吗。
1:
..
end;
end;
或可在用OnValidate进行过滤。
procedure tform1.oncreate
begin
with yourdateset do
begin
fieldbyname('field1').onvvalidate:=MyFieldValidate;
fieldbyname('field1').onvvalidate:=MyFieldValidate;
end;
end;
procedure TForm1.MyFieldValidate(Sender as TField);
var fieldname:string;
begin
fieldname:=(Sender as TField).FieldName;
if fieldname='field1' then
begin
if dataset1.fieldbyname('field1').asinteger>10000 then
begin
showmessage('在field1字段中不能输入超过10000的数.');
fieldbyname('field1').asinteger:=0;
abort;
end;
end;
end;