如何可以控制DBGrid中的每个单元格,比如在特定的单元格上绘图,背景色等等??

解决方案 »

  1.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
    //  if Column.Index = 0 then //列判断
    //  if Column.Field.DataSet.RecNo then //行判断
      if Random(2) = 0{ TODO : 条件成立 } then begin
        TDBGrid(Sender).Canvas.FillRect(Rect);
        TDBGrid(Sender).Canvas.Font.Color := clRed;
      end;
      TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  2.   

    绘制位图
    procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer;
      Column: TColumn; State: TGridDrawState);
    var
       DrawBitmap : boolean ;
    begin
         with Sender as TDBGrid do begin
              if Table1State.Value = 'HI' then begin
                 Canvas.Brush.Color := clYellow ;
                 if gdSelected in State then begin
                    Canvas.Font.Color := clBlack ;
                    Canvas.Font.Style := Canvas.Font.Style + [fsBold] ;
                 end ;
                 DrawBitmap := (Column.FieldName = 'Company') ;
              end
              else
                 DrawBitmap := False ;
              Canvas.FillRect(Rect) ;
              if DrawBitmap then begin
                 { if your bitmap is too large, you
                   should investigate StretchDraw
                   rather than Draw }
                 Canvas.Draw(Rect.Left, Rect.Top, MyBitmap) ;
                 Canvas.TextOut(Rect.Left + MyBitmap.Width + 5, Rect.Top,
                                Column.Field.AsString) ;
              end
              else
                 Canvas.TextOut(Rect.Left, Rect.Top,
                                Column.Field.AsString) ;
         end ;
    end ;