Цвет строки в RxDbGrid

Модераторы: alexs, Модераторы

Цвет строки в RxDbGrid

Сообщение WAYFARER » 17.03.2017 15:46:33

Столкнулся с проблемой, не получается изменить цвет строки, пробовал всякие способы.
Попытки изменить цвет в onDrawColumnCell - начисто игнорируется (в обычном гриде работает)

попробовал onGetCellProps:

Код: Выделить всё
procedure TfMain.gRegGetCellProps(Sender: TObject; Field: TField; AFont: TFont;
  var Background: TColor);
begin
    if Field.Dataset.FieldByName('is_done').AsInteger > 0 then
    begin
      Background := clGray;
      .....
    end;
end; 


Падает с ошибкой(см. скрин)
Ругается на if Field.Dataset.FieldByName('is_done'). и падает замертво.

Lazarus 1.6.2 / fpc 3.0.0 / win32 /
Что я делаю не так?
Или может кто нибудь рабочим примером поделится - как в зависимости от значения поля поменять фон в строке?
Вложения
error.png
error.png (11.91 КБ) Просмотров: 14293
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Re: Цвет строки в RxDbGrid

Сообщение Little_Roo » 17.03.2017 16:00:31

Вообще-то Алекс всегда говорит, что его Rx заточен под транковые версии лазаря и fpc.
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Цвет строки в RxDbGrid

Сообщение pupsik » 17.03.2017 16:03:31

Для стандартного грида вроде так:
Код: Выделить всё
procedure ....PrepareCanvas(sender: TObject; DataCol: Integer;
  Column: TColumn; AState: TGridDrawState);
begin
{ можно "ловить" по полю
  if Column.FieldName='ваше поле' then
  begin    }
//можно "искать" значение.
    if Column.Field.AsString='что то там...' then
    begin
      with (Sender As TDBGrid) do
      begin
        //Custom drawing
        Canvas.Brush.Color := clYellow;
        Canvas.Font.Color:=clRed;
        Canvas.Font.Style:=[fsBold];
      end;
    end;
//  end;
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Цвет строки в RxDbGrid

Сообщение Снег Север » 17.03.2017 16:33:14

А Field.Dataset вообще существует? Я что-то такую конструкцию не встречал.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3038
Зарегистрирован: 27.11.2007 16:14:47

Re: Цвет строки в RxDbGrid

Сообщение pupsik » 17.03.2017 16:43:50

По поводу строки.. Не уверен что верный вариант:
Код: Выделить всё
procedure ...PrepareCanvas(sender: TObject; DataCol: Integer;
  Column: TColumn; AState: TGridDrawState);   
var
  i : integer;
begin
  if UTF8Pos(dataset.FieldByName('LastName').AsString, 'что ищем') <> 0 then
  begin
    with (Sender As TDBGrid) do
    begin
      for i := 0 to Columns.Count - 1 do
      begin
        Canvas.Brush.Color := clYellow;
        Canvas.Font.Color:=clRed;
        Canvas.Font.Style:=[fsBold];
      end;
    end;
  end;
end;       
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Цвет строки в RxDbGrid

Сообщение alexs » 17.03.2017 20:54:19

WAYFARER
Вот такой стиль программирования - потенциальный источник проблем...
Код: Выделить всё
if Field.Dataset.FieldByName('is_done').AsInteger > 0 then

О возможных проблемах:
Field - может быть nil
Field.Dataset.FieldByName('is_done') - может не найти такого поля

Испльзуйте созданные поля во время разработки.
Два раза щёлкнуть мышкой по вашему объекту - источнику данных. В открывшемся окне - нажать вверху + - и добавить все поля
Тогда данный код сведётся к виду:

Код: Выделить всё
if ИмяВашегоDSis_done.AsInteger > 0 then

И ещё - обработчик на рисование колонки можно назначать в самой колонке.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Цвет строки в RxDbGrid

Сообщение WAYFARER » 18.03.2017 16:54:41

pupsik, спасибо! Решение работает.
alexs писал(а):О возможных проблемах:
Field - может быть nil
Field.Dataset.FieldByName('is_done') - может не найти такого поля

Ну так я же знаю что такое поле есть и nil быть не может:)
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган


Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru