DBGrid中,如何检查检查输入值?(100分)

  • 主题发起人 主题发起人 LuJuhe
  • 开始时间 开始时间
L

LuJuhe

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DBGrid接受输入数据,如何检查输入值是否合法呢?
要求在输入时就检查,而不是保存进数据库之前。
 
我记得dataset好像有个beforepost事件吧,在那个里面可以检查
 
1.在onkeypress检测
2.在ColExit检测
3.........
 
to esimon:
要在输入后马上检查,而不是保存之前。

to fanny501:
在OnColExit中具体怎么做? 我现在的难点是无法获取当前焦点的数值!
 
声明类:
Tmygrid =class(TCustomGrid);

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
showmessage( Tmygrid(self.DBGrid1).InplaceEditor.Text );
end;









例如:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, DB, ADODB, Grids, DBGrids;

type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADODataSet1: TADODataSet;
DataSource1: TDataSource;
DBEdit1: TDBEdit;
Button1: TButton;
DBGrid1: TDBGrid;
DataSource2: TDataSource;
procedure DBEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure DBGrid1ColExit(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Tmygrid =class(TCustomGrid);

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DBEdit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

end;

procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
showmessage( Tmygrid(self.DBGrid1).InplaceEditor.Text );
end;

end.


高难度问题,分分吧
 
呵呵,基本可用,但是容易引起访问冲突,不知道怎么回事?
我是这样用的(好像不需要定义TCustomGrid吧?),但是会引起访问冲突,哪里错了?
procedure TForm1.DBGrid1ColExit(Sender: TObject);
begin
//showmessage((Sender as TDBGrid).InplaceEditor.[red]Edit[/red]Text );
Try
StrToCurr((Sender as TDBGrid).InplaceEditor.EditText);
Except
(Sender as TDBGrid).InplaceEditor.Text := 0;
end;
end;
 
但是会引起访问冲突?
这并不是什么冲突,在dbgrid没有编辑时,InplaceEditor应该是个空指针,只有当进入编辑状态时
dbgrid才创建InplaceEditor
我只在于抛砖引玉,一些事情你还是要自己解决的,这个东西并不是整天用,仅仅知道个大概
 
是的,看来我得看看VCL源码。
谢谢各位。
 
后退
顶部