Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations SkipVought on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

How to colour alternate rows in a DBGrid

Database Programming

How to colour alternate rows in a DBGrid

by  towerbase  Posted    (Edited  )
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;
Register to rate this FAQ  : BAD 1 2 3 4 5 6 7 8 9 10 GOOD
Please Note: 1 is Bad, 10 is Good :-)

Part and Inventory Search

Back
Top