如何在同一个DBGrid中,通过某一条件检索后,把数据中符合条件的一些数据以不同的颜色显示。  ---------------  正常显示
  ---------------  正常显示
  ===============  显示红色
  ---------------  正常显示
  ≡≡≡≡≡≡≡≡  显示绿色
  ---------------  正常显示  希望各位大虾指点迷津!

解决方案 »

  1.   

    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;Field: TField; State: TGridDrawState);
      begin
       if Table1.Fieldbyname(′Salary′).value<=SpinEdit1.value then
       DBGrid1.Canvas.Brush.Color:=ColorGrid1.ForeGroundColor
       else
       DBGrid1.Canvas.Brush.Color:=ColorGrid1.BackGroundColor;
       DBGrid1.Canvas.FillRect(Rect);
       DBGrid1.Canvas.TextOut(Rect.left+2,Rect.top+2,Field.AsString);
      end;
      

  2.   

    dbgrid.defaultdrawing := false;
      

  3.   

    这样就可以了
    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    begin
        if field.DataType <> ftFloat then exit;
        if field.AsFloat >25000 then  begin
         dbgrid1.Canvas.brush.Color:=$00B0B0B0;
         dbgrid1.canvas.font.color:=clgreen;
        end;   DBGrid1.Canvas.FillRect(rect);
       DBGrid1.DefaultDrawDataCell(rect,field,state);
    end;
      

  4.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if UpperCase(Column.FieldName) = UpperCase('Salary') then //要操作的字段
      if Column.Field.AsFloat <= 20000 then
        DBGrid1.Canvas.Font.Color := clBlue
      else if (Column.Field.AsFloat >20000) AND (Column.Field.AsFloat <= 40000) then
        DBGrid1.Canvas.Font.Color := clRed
      else if Column.Field.AsFloat > 40000 then
        DBGrid1.Canvas.Font.Color := clGreen;  DbGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;