在dbgrid中(或者dbgrideh)我想要达到这样的效果 只要是字段(name)值=‘asd’的 我就让这个CELL的颜色为clred 并且‘asd’字体为红色 谢谢

解决方案 »

  1.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if TDBGrid(Sender).DataSource.DataSet.FieldByName('name').AsString = 'asd' then
      begin
        TDBGrid(Sender).Canvas.Brush.Color := clRed;
        TDBGrid(Sender).Canvas.Font.Color := clBlue;
      end;
      TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  2.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
     begin
     if AdoTable1.FindField('name').AsString = 'asd' then
     begin
     DBGrid1.Canvas.Brush.Color :=clred;
     end;
     DBGrid1.Columns[1].Title.Font.Color:=clred;
     DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;
      

  3.   

    procedure TFm_vender.Base_GridDrawDataCell(Sender: TObject;
      const Rect: TRect; Field: TField; State: TGridDrawState);
    begin
      if lowercase(Field.FullName) = 'name' then
      begin
        if field.AsString <> 'asdthen
        begin
          SetBkColor(TDBGrid(Sender).canvas.handle, clred);
          TDBGrid(Sender).Canvas.TextRect(rect, 0, 0, field.AsString);
          TDBGrid(Sender).Canvas.Textout(rect.Left, rect.Top, field.AsString);
        end
        else
          setbkcolor(TDBGrid(Sender).canvas.handle, clSkyBlue);
      end;
    end;
      

  4.   

    不知道是不是我没有说清楚啊  1#和2#的朋友谢谢你们 你俩的代码只是改变那一行(row)的颜色 而我想要的结果是 只要那一个单元格(cell)的颜色和字体的变化 3#的朋友的思路很好 但是关于TDBGrid(Sender).canvas.handle 你可能没弄明白 当然我也没弄清楚
      

  5.   

    TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);中的datacol参数有什么用??
      

  6.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var Rec:TRect;
    begin
      if (TDBGrid(Sender).DataSource.DataSet.FieldByName('name').AsString = '2') and (DataCol=1) then
      begin
        TDBGrid(Sender).Canvas.Brush.Color := clRed;
        TDBGrid(Sender).Canvas.Font.Color := clBlue;
      end;
      TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
    // DataCol是当前的列索引,以上是把第二列改变