请帮助“在数据集移动时,dbgrid的行可以变色问题”(100分)

  • 主题发起人 主题发起人 yuron
  • 开始时间 开始时间
Y

yuron

Unregistered / Unconfirmed
GUEST, unregistred user!
[blue]dbgrid绑定数据集后,在ADOQUERY的记录上下移动时,DBGRID对应的行要变色,
我用的是ADOCONNECTION、ADOQUERY、DATASOURCE、DBGRID控件,请大家帮忙,怎样才能实现。[/blue]
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:TRect;DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

if Table1.FieldByName('Population').AsInteger > 20000000 then

DBGrid1.Canvas.Font.Color := clBlue;

DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);

end;

 
首先要将DefaultDrawing设为False,然后写上面的代码。
 
dgRowSelect赋值true
 
procedure Tform1.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
inherited;
if csLoading in ComponentState then exit;
if (DBGrid1.Fields[0].AsString=dbedtassetno.Text) then
begin
DBGrid1.Canvas.Brush.Color:=$00D9F3EB;//选择你喜欢的颜色
DBGrid1.Canvas.Font.Color:= clDefault;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
 
增加一个dbedit构件,关联数据表的唯主键,然后把构件隐掉就可以了
也可以不用增加dbedit构件,只要把你所选中的行的主键字段值读出来就可
if (DBGrid1.Fields[0].AsString=dbedtassetno.Text) then
改为
 if (DBGrid1.Fields[0].AsString='你所选中的主键字段值' then
 
to wdl:您好,您的方法只是将大于给定值得所有行都变色
to c0371:您好,您的方法我想也是很合理的,但是调试的时候,也是DBGRID行全部变色,
我用的判断语句是:if (DBGrid1.Fields[0].AsString=adoquery1.fieldbyname('t0100').asstring then
但是我跟踪的时候,adoquery1.fieldbyname('t0100').asstring='4',而DBGrid1.Fields[0].AsString每次事件
触发时,值都是4,所以都是真,最后就全部变色了。请再帮忙看看。
to all:谢谢您们了。
 
多人接受答案了。
 
后退
顶部