如何让 DBGRID 中光标所在的哪行记录上显示颜色?

解决方案 »

  1.   

    我这里一个函数,你可以试试看:
    (*******************************************************************************
    *   过程名:SetGridColor
    *   过程说明:  用于设置数据库应用程序的DBGrid的数据显示时的颜色
    *               可在TDBGrid的DrawColumnCell事件中进行设置,例如:
    *               SetGridColor(CompanyADTable,DBGrid1,Rect,DataCol,Column,State);*   参数说明:
    *   AdoTable:数据库对象名称(可重载,可以使用ADOTABLE,ADOQUERY,TTABLE,TQUERY对象.全部从TDataSet中继承得来)
    *   DbGrid1:要显示的数据库TDBGRID对象
    *   Rect,DataCol,Column,State:这四个参数可全部从TDBGrid的DrawColumnCell事件中传递过来!
    *******************************************************************************)Procedure SetGridColor(Var AdoTable:TDataSet;Var DbGrid1:TDBGrid;const Rect: TRect; DataCol: Integer;
     Column: TColumn; State: TGridDrawState);
    begin
      Case AdoTable.RecNo mod 2 = 0 of // file://根据数据集的记录号进行判断
        True: DbGrid1.Canvas.Brush.color:=clcream;// file://偶数行用浅绿色显示
        False: DbGrid1.Canvas.Brush.color:= clwhite;// file://奇数行用蓝色表示
      end;
      If ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
        Case DataCol mod 2 = 0 of
        True :
        begin
           DbGrid1.Canvas.Brush.color:=$00ffff; //file://当前选中行的偶数列用红色
           dbgrid1.Canvas.Font.Color:=clred;
        end;
        False:
        begin
          DbGrid1.Canvas.Brush.color:=$00ffff;// file://当前选中行的奇数列用绿色表示
          dbgrid1.Canvas.Font.Color:=clred;
        end;
        end;
      DbGrid1.Canvas.pen.mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State);
    end;
      

  2.   

    其实最简单的方法是选中option中的dgRowSelect, 则选中时会变为蓝色
      

  3.   

    选中option中的dgRowSelect, 则选中时会变为蓝
      

  4.   

    把option中的dgRowSelect设置为True,增加DBGrid的  OnDrawColumnCell 事件,在这个事件中增加代码就可以使选中的行使用你指定的颜色。参考代码如下:  if ((state = [gdSelected, gdFocused]) or (state = [gdSelected])) then
      begin
        self.DBGrid.Canvas.Brush.Color := clRED; //在这里更改为你想要的颜色
      end;  self.DBGrid.DefaultDrawColumnCell(Rect,DataCol,Column,state);