С DBGrids это делается намного проще. Здесь мы будем использовать событие «OnDrawColumnCell». Следующий пример разукрашивает ячейки колонки «Status» когда значение НЕ равно «a».
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
const
clPaleGreen = TColor($CCFFCC);
clPaleRed = TColor($CCCCFF);
begin
If Column.FieldName = 'Status' then
// Удалите эту линию, если хотете закрасить целую линию
If Column.Field.Dataset.FieldbyName('Status').AsString <> 'a' then
If (gdFocused in State) // имеет ли ячейка фокус?
then
dbgrid1.canvas.brush.color := clBlack // имеет фокус
else
dbgrid1.canvas.brush.color := clPaleGreen; // не имеет фокуса
// Теперь давайте закрасим ячейку используя стандартный метод:
dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State)
end;