以下方法只把一行的颜色都改变了,而我是要根据单元格的数据值而把相应这一单元格颜色改变,不是整行变。
procedure TMainForm.DBGridEh1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
  var num:integer;
begin
num:=sx.FieldByName('num').AsInteger;
case num of
1,2,7,8,12:dbgrideh1.Canvas.Brush.Color:=clRed;
5,6,11:dbgrideh1.Canvas.Brush.Color:=clGreen;
3,4,9,10:dbgrideh1.Canvas.Brush.Color:=clBlue;
end;
DBGridEh1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;有啥好方法?

解决方案 »

  1.   

    procedure TMainForm.DBGridEh1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
    var tmprc: TRect;
      num: Integer;
    begin
      if Column.FieldName = 'num' then
      begin
        tmprc := DBGridEh1.CellRect(DataCol+1, 0);
        if tmprc.Left = Rect.Left then
        begin
          num := Column.Field.AsInteger;
          case num of
            1, 2, 7, 8, 12: dbgrideh1.Canvas.Brush.Color := clRed;
            5, 6, 11: dbgrideh1.Canvas.Brush.Color := clGreen;
            3, 4, 9, 10: dbgrideh1.Canvas.Brush.Color := clBlue;
          end;
          DBGridEh1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
        end;
      end;
    end;