INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Member Login

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips now!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!

E-mail*
Handle

Password
Verify P'word
*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Partner With Us!

"Best Of Breed" Forums Add Stickiness To Your Site
Partner Button
(Download This Button Today!)

Member Feedback

"...This is easily the most helpful website I've ever used, and this is the best forum with the quickest response time bar none...."

Geography

Where in the world do Tek-Tips members come from?

CodeGear (Borland): Delphi FAQ

Database Programming

How to colour alternate rows in a DBGrid
Posted: 29 Oct 05

The appearance of a DBGrid control may be improved by alternating the colour of each row.  The following code colours the odd numbered rows clAqua and the even numbered rows clWhite.  

First, you need to set the DefaultDrawing property of the grid to FALSE.

Second, you need to code an ColumnCellDraw event handler for the grid similar to this:

CODE

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
  RowHeight = 18;
begin
  DBGrid1.Canvas.Font.Color := clBlack;
  if Odd(rect.top div RowHeight) then
    DBGrid1.canvas.Brush.Color := clAqua
  else
    DBGrid1.Canvas.Brush.Color := clWhite;
  DBGrid1.canvas.TextRect(rect,rect.Left,rect.top,table.fields[DataCol].AsString);
end;
Note that this routine assumes that the font size is 8 and that the row height is 18.  If you use a different font size then you will need to adjust RowHeight.

Finally, you need to code an AfterScroll event handler for the Dataset that provides data to the DBGrid to ensure that the DBGrid is redrawn properly.

CODE

procedure TForm1.TableAfterScroll(DataSet: TDataSet);
begin
  DBGrid1.Invalidate;
end;

Back to CodeGear (Borland): Delphi FAQ Index
Back to CodeGear (Borland): Delphi Forum
My FAQ Archive
Email This FAQ To A Friend

My Archive