我想根据查询到的记录的某个字段值的不同在DBGrid里把该记录显示不同的颜色。。
好像DBGrid的记录颜色调整都是把整个DBGrid的记录显示为一种颜色。。
请不吝赐教

解决方案 »

  1.   

    procedure TFrmQuery.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
    if StrToIntDef(EdtAvgDialyAcount.Text,0)<>0 then
      begin
      if DMRemote.DataModule1.CDSData.FieldByName('diff').AsInteger<>0 then
      begin
         with (Sender as TDBGrid).Canvas do
         Brush.Color:=clRed;    (Sender as TDBGrid).DefaultDrawDataCell(Rect,Column.Field,State);  end;
      end;
    end;
      

  2.   

    procedure TCustomerRelationFrm.DBGrid2DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    var
      oldcolor:tcolor;
      oldpm:tpenmode;
      p:integer;
    begin
      p:=length(self.ClientDataSet2.fields[0].asstring);
      if p<=6 then {设定变色的行的条件}
      begin
        oldpm:= self.dbgrid2.Canvas.pen.mode;
        oldcolor:= self.dbgrid2.Canvas.Brush.color;
        //self.dbgrid2.Canvas.Brush.color:=clwhite;
        //self.DBGrid2.Canvas.Pen.Color:=clred;
        self.DBGrid2.Font.Color:=clred;
        //self.dbgrid2.Canvas.pen.mode:=pmmask;
        self.dbgrid2.DefaultDrawColumnCell(Rect,DataCol,Column,State);
        self.dbgrid2.Canvas.Brush.color:=oldcolor;
        self.dbgrid2.Canvas.pen.mode:=oldpm;
      end else
          begin
            oldpm:= self.dbgrid2.Canvas.pen.mode;
            oldcolor:= self.dbgrid2.Canvas.Brush.color;
            //self.dbgrid2.Canvas.Brush.color:=clyellow;
            self.DBGrid2.Font.Color:=clblue;
            //self.DBGrid2.Canvas.Pen.Color:=clblue;
            //self.dbgrid2.Canvas.pen.mode:=pmmask;
            self.dbgrid2.DefaultDrawColumnCell(Rect,DataCol,Column,State);
            self.dbgrid2.Canvas.Brush.color:=oldcolor;
            self.dbgrid2.Canvas.pen.mode:=oldpm;
          end;end;