OnDrawColumnCell:if (ADOQuery.FieldValues['B'] > ADOQuery.FieldValues['A']) then
  DBGrid.Canvas.Font.Color := clRed;DBGrid.DrawColumnCell(Rect,DataCol, Column, State);

解决方案 »

  1.   

    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);begin
      if Table1.FieldByName('Size').AsFloat > 10 then
        DBGrid1.Canvas.Font.Color := clRed;
      DBGrid1.DefaultDrawDataCell(Rect, Field, State);
    end;
      

  2.   

    你看一下帮助
    StringGrid中有个例子!
      

  3.   

    在OnDrawColumncell事件中加入以下代码
    if 条件 then
      dbgrid1.canvas.font.color := clred 
    else
      dbgrid1.canvas.font.color := clblue ;
    dbgrid1.DefaultDrawColumnCell(rect ,datacol ,column ,state);
      

  4.   

    我的代码如下,两个字段都是DateTime型的,而且确保第2列只有一个比第一列大的,可是在DBGrid中显示的第2列都是红色。
    if (ADOQueryExam.FieldByName('arrive_time').AsDateTime >            ADOQueryExam.FieldByName('worktime_start').AsDateTime) then
        dbGridDetail.Canvas.Font.Color :=clRed;
      
       dbGridDetail.DefaultDrawColumnCell(rect,datacol,column,state);
      

  5.   

    以下代码是我在一个类似的程序中的实现代码:
    var PrevColor: TColor;
    begin
      if (ARow >= 1) and (grdPL.Cells[2,ARow] <> grdPL.Cells[3,ARow]) then
      begin
        PrevColor := grdPL.Canvas.Font.Color;
        grdPL.Canvas.Font.Color := clRed;
        grdPL.Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, grdPL.Cells[ACol, ARow]);
        grdPL.Canvas.Font.Color := PrevColor;
      end;
    end;只要把if语句中and后面的条件改成你自己的条件就可以了。
      

  6.   

    补充一句,之所以整列都变红了,是因为你肯定没有恢复Font.Color,因此所有符合条件的行之后的数据都变成了红色。
      

  7.   

    if  (ADOQueryExam.FieldByName('arrive_time').AsDateTime  >                        ADOQueryExam.FieldByName('worktime_start').AsDateTime)  then 
            dbGridDetail.Canvas.Font.Color  :=clRed
    else
            dbgriddetail.canvas.font.color := clblack ; 
        
          dbGridDetail.DefaultDrawColumnCell(rect,datacol,column,state);