S
sandylao
Unregistered / Unconfirmed
GUEST, unregistred user!
数据库表有两列,一列是项目,第二列是项目值,想根据不同的项目在DBGRID里进行不同处理(项目值为‘类型’时,DBGRID第二列可以显示按钮),我在ADOQUERY的AfterScroll事件写了如下代码:
procedure Tform1.adoquery1AfterScroll(DataSet: TDataSet);
begin
if adoquery1.FieldValues['item']='类型' then //如果第一列的值为‘类型’
dbgrid1.Columns[1].ButtonStyle :=cbsEllipsis //显示CELL的按钮
else dbgrid1.Columns[1].ButtonStyle :=cbsNone;//否则不显示CELL的按钮
end;
现在的情况是当用鼠标点第二列各个CELL时,程序可以按预期的执行,但是如果使用键盘的DOWN和UP键上下移动记录时,在‘类型’行不出现按钮,下移时在‘类型’的下一行出现按钮,上移时在‘类型’的上一行出现按钮。(DOWN和UP键是DBGRID自己的事件控制的,会自动调用ADOQUERY的MOVEBY)。不知道是什么原因?我怀疑与DBGRID的事件有关,想把DBGRID的KEYDOWN事件继承下来后修改,或者屏蔽掉自己写KEYDOWN事件。但没写过,不知道各位大侠能否提供一个例子?急,不胜感激!
我写的组件代码如下,但测试发现KEYDOWN事件不能触发(方向键还是起作用,估计是DBGRID带的),请各位帮我看看:
unit Mydbgrid;
interface
uses
SysUtils, Classes, Controls, Grids, DBGrids;
type
tMydbgrid = class(TDBGrid)
private
FOnKeyDown:TNotifyEvent;
protected
procedure KeyDown;Dynamic;
public
published
property OnKeyDown: TNotifyEvent read FOnKeyDown write FOnKeyDown;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Data Controls', [tMydbgrid]);
end;
procedure tMydbgrid.KeyDown;
begin
if assigned(FOnKeyDown) then FOnKeyDown(Self);
end;
procedure Tform1.adoquery1AfterScroll(DataSet: TDataSet);
begin
if adoquery1.FieldValues['item']='类型' then //如果第一列的值为‘类型’
dbgrid1.Columns[1].ButtonStyle :=cbsEllipsis //显示CELL的按钮
else dbgrid1.Columns[1].ButtonStyle :=cbsNone;//否则不显示CELL的按钮
end;
现在的情况是当用鼠标点第二列各个CELL时,程序可以按预期的执行,但是如果使用键盘的DOWN和UP键上下移动记录时,在‘类型’行不出现按钮,下移时在‘类型’的下一行出现按钮,上移时在‘类型’的上一行出现按钮。(DOWN和UP键是DBGRID自己的事件控制的,会自动调用ADOQUERY的MOVEBY)。不知道是什么原因?我怀疑与DBGRID的事件有关,想把DBGRID的KEYDOWN事件继承下来后修改,或者屏蔽掉自己写KEYDOWN事件。但没写过,不知道各位大侠能否提供一个例子?急,不胜感激!
我写的组件代码如下,但测试发现KEYDOWN事件不能触发(方向键还是起作用,估计是DBGRID带的),请各位帮我看看:
unit Mydbgrid;
interface
uses
SysUtils, Classes, Controls, Grids, DBGrids;
type
tMydbgrid = class(TDBGrid)
private
FOnKeyDown:TNotifyEvent;
protected
procedure KeyDown;Dynamic;
public
published
property OnKeyDown: TNotifyEvent read FOnKeyDown write FOnKeyDown;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Data Controls', [tMydbgrid]);
end;
procedure tMydbgrid.KeyDown;
begin
if assigned(FOnKeyDown) then FOnKeyDown(Self);
end;