Страница 1 из 1
Цвет строки в RxDbGrid
Добавлено: 17.03.2017 14:46:33
WAYFARER
Столкнулся с проблемой, не получается изменить цвет строки, пробовал всякие способы.
Попытки изменить цвет в 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 /
Что я делаю не так?
Или может кто нибудь рабочим примером поделится - как в зависимости от значения поля поменять фон в строке?
Re: Цвет строки в RxDbGrid
Добавлено: 17.03.2017 15:00:31
Little_Roo
Вообще-то Алекс всегда говорит, что его Rx заточен под транковые версии лазаря и fpc.
Re: Цвет строки в RxDbGrid
Добавлено: 17.03.2017 15:03:31
pupsik
Для стандартного грида вроде так:
Код: Выделить всё
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;
Re: Цвет строки в RxDbGrid
Добавлено: 17.03.2017 15:33:14
Снег Север
А Field.Dataset вообще существует? Я что-то такую конструкцию не встречал.
Re: Цвет строки в RxDbGrid
Добавлено: 17.03.2017 15:43:50
pupsik
По поводу строки.. Не уверен что верный вариант:
Код: Выделить всё
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;
Re: Цвет строки в RxDbGrid
Добавлено: 17.03.2017 19:54:19
alexs
WAYFARERВот такой стиль программирования - потенциальный источник проблем...
Код: Выделить всё
if Field.Dataset.FieldByName('is_done').AsInteger > 0 then
О возможных проблемах:
Field - может быть nil
Field.Dataset.FieldByName('is_done') - может не найти такого поля
Испльзуйте созданные поля во время разработки.
Два раза щёлкнуть мышкой по вашему объекту - источнику данных. В открывшемся окне - нажать вверху + - и добавить все поля
Тогда данный код сведётся к виду:
И ещё - обработчик на рисование колонки можно назначать в самой колонке.
Re: Цвет строки в RxDbGrid
Добавлено: 18.03.2017 15:54:41
WAYFARER
pupsik, спасибо! Решение работает.
alexs писал(а):О возможных проблемах:
Field - может быть nil
Field.Dataset.FieldByName('is_done') - может не найти такого поля
Ну так я же знаю что такое поле есть и nil быть не может:)