Карта сайтаСсылкиКонтакты

Динамическое обновление цвета в DBGrid

PDF Печать
Статьи

Например, мы хотим, чтобы наша сетка отобразила строки информации стран. Если население страны больше 20 миллионов, мы отобразим его строку с синим текстом. Мы проверяем значения и обновляем цвет текста в событии OnDrawColumnCell.


procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; 
           const Rect: TRect; DataCol: Integer; Column: TColumn; 
           State: TGridDrawState); 
begin 
   if Table1.FieldByName('Population').AsInteger > 20000000 then 
     TDBGrid(Sender).Canvas.Font.Color := clBlue; 
   TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, 
                                         State); 
end; 

Вы можете также делать это без использования TTable или другого DataSource-объекта:


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 = 'DS_Status' then   
// Удалите строку выше, чтобы окрасить всю строку в таблице,
// иначе будет окрашена только ячейка 

If Column.Field.Dataset.FieldbyName('Population').AsInteger > 2000 
   //Так что Вы не должны знать, что Datasource это (Table или Query..) 
   then 
   If (gdFocused in State) //If the cell has the focus 
     then dbgrid1.canvas.brush.color := clBlack     
     else dbgrid1.canvas.brush.color := clPaleGreen; 

dbgrid1.DefaultDrawColumnCell(rect,DataCol,Column,State) 
end; 

Чтобы окрасить всю ячейку.

Решение очень просто. Измените строку


TDBGrid(Sender).Canvas.Font.Color := clBlue; на 
TDBGrid(Sender).Canvas.Brush.Color := clBlue; 

По материалам http://delphi.3000.com


 

Добавить комментарий


Защитный код
Обновить