在ehlib的DBGridEh输入数据时,如何控制一定要先输入某栏位,才能输入另外一个栏位??
解决方案 »
- 平坦寻址中一个基本的但是一直没找到答案的问题
- 程序版本号的问题
- 奇怪!救命!为什么ini文件中写多个Integer会出现错误?
- 想问问各位:COM+技术现在是不是已经过时? 如果是,现在的.net架构是用什么代替COM+的?
- TQuery,TSession 和 TDatebase.
- 请问如何让listview的选定行用特殊颜色表示?
- 怎样用delphi连接access数据库??????????????????/
- 关于DBGRID的问题?
- inputquery对话框的汉化?
- olecontainer加载word后怎么修改word内容
- Indy控件中FTP下载问题,急!!!
- 网页中怎样采集文本信息,然后存入数据库(Access)。
(DBGridEh1.datasource.dataset.fieldbyname('须先输入的字段').isnull) then
begin
for i:=0 to DBGridEh1.Columns.Count -1 do
begin
if DBGridEh1.Columns[0].FieldName ='须先输入的字段' then
begin
DBGrid1.SelectedIndex :=i;
break;
end;
end;
end;
改一下DBGridEh类的代码,生成一个OnBeforeCellExit事件,在这个事件判断是否输入数据: TDBGridEh = class(TCustomDBGridEh)
private
.... protected
procedure DefaultDrawColumnCell(const Rect: TRect;DataCol: Integer; Column: TColumnEh; State: TGridDrawState); overload;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override{virtual};
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure KeyPress(var Key: Char);override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override{virtual};
procedure KeyUp(var Key: Word; Shift: TShiftState); override{virtual};{´¥·¢×Ô¶¨Òåʼþ£ºBeforeCellExit}
procedure TDBGridEh.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if((CurCell.X <> Col)or
(CurCell.Y <> Row))and
(Firstfocused=false)then
begin{´¥·¢×Ô¶¨ÒåʼþBeforeCellExit}
if Assigned(OnBeforeCellExit) then{×Ô¶¨Òåʼþ}
fOnBeforeCellExit(self,CurCell.Y,CurCell.X);
end;
inherited;
end;{´¥·¢×Ô¶¨Òåʼþ£ºBeforeCellExit}
procedure TDBGridEh.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
inherited;
Firstfocused:=false;
end;procedure TDBGridEh.KeyDown(var Key: Word; Shift: TShiftState);
var
i:integer;
begin
if Key=VK_DOWN then
begin
i:=DataSource.DataSet.RecNo;
if i=-1 then
i:=DataSource.DataSet.RecordCount;
if i=DataSource.DataSet.RecordCount then
Abort;{Key:=0;}
end;
if(Key=VK_UP)or
(Key=VK_DOWN)or
(Key=VK_LEFT)or
(Key=VK_RIGHT)or
(Key=VK_TAB)or
(Key=VK_RETURN)then
begin
if((CurCell.X <> Col)or
(CurCell.Y <> Row))and
(Firstfocused=false)then
begin{´¥·¢×Ô¶¨ÒåʼþBeforeCellExit}
if Assigned(OnBeforeCellExit) then
fOnBeforeCellExit(self,CurCell.Y,CurCell.X);
end;
end;
inherited;
end;procedure TDBGridEh.KeyUp(var Key: Word; Shift: TShiftState);
begin
inherited;
DoKeyUped(Self,Key,Shift);
Firstfocused:=false;
end;procedure TDBGridEh.DefaultDrawColumnCell(const Rect: TRect; DataCol: Integer; Column: TColumnEh; State: TGridDrawState);
begin
//inherited;
{Èç¹ûÒª»­½¹µã£¬¾ÍÈÃDBGrid½øÈë±à¼­×´Ì¬}
if(gdFocused in State) then
begin
//Èç¹ûÊǽøÈëÒ»¸öеÄCell
if((CurCell.X <> DataCol{Col})or
(CurCell.Y <> Row{DataSource.DataSet.RecNo}))then
begin
{Ì׺ڿò}
if fShowRect then
begin
EditorMode := True;
AddBox;
{È«Ñ¡ÆäÖеÄ×Ö·û}
CurCell.tag := 0;
GetWindowRect(InPlaceEditor.Handle,CurCell.r);
SendMessage(InPlaceEditor.Handle,EM_SETSEL,0,1000);
end;
{¸üРRow,col }
CurCell.X := DataCol{Col};
CurCell.Y := Row{DataSource.DataSet.RecNo};
end else
begin {Õý³£ÏÔʾ״̬µÄCell}
inherited;
end;
end;
end;
先定义: TCurCell = Record {µ±Ç°½¹µãCellµÄλÖÃ}
X : integer; {Óн¹µãCellµÄColumnIndex}
Y : integer; {Óн¹µãCellËùÔڵļͼµÄ¼Í¼ºÅ}
tag : integer; {×î½ü½øÈë¸ÃCellºóÊÇ·ñµ¯³öÁËÏÂÀ­Áбí}
r : TRect; {ûÓÐʹÓÃ}
end;
CurCell : TCurCell; {¼Ç¼µ±Ç°Óн¹µãµÄCell}