2017-01-17 14 views
0

Как рисовать целую строку на основе некоторого значения в определенном столбце? Я TStringGrid с четырьмя колоннами:TStringgrid изменить цвет строки условно в firemonkey

ID | NAME | DATE  | STATE 
1  X  2017-01-01  TRUE   --whole row need to be yellow 
2  Y  2017-01-01  FALSE   --default color (no change) 

Если моя колонка состояние имеет значение истинную перекрашивать весь ряд, чтобы быть желтым.

Я попытался это, но она работает только на колонке состояния:

procedure TTNarudzbenice.grSomeNameDrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;const Row:Integer; const Value: TValue; const State: TGridDrawStates); 
var 
    aRowColor: TBrush; 
begin 

    aRowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); 
    //----- 
    if Value.ToString = 'TRUE' then 
    begin 
    aRowColor.Color := TAlphaColors.Yellow; 

    Canvas.FillRect(Bounds, 0, 0, [], 1, aRowColor); 

    Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State); 

end; 

    aRowColor.free; 

end; 

ответ

3

Просто простой настройки

procedure TTNarudzbenice.grSomeNameDrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;const Row:Integer; const Value: TValue; const State: TGridDrawStates); 
var 
    aRowColor: TBrush; 
begin 

    aRowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); 
    //----- 
    if (Sender as TStringGrid).Cells[ 3, Row ] = 'TRUE' then //// This line changed 
    begin 
    aRowColor.Color := TAlphaColors.Yellow; 

    Canvas.FillRect(Bounds, 0, 0, [], 1, aRowColor); 

    Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State); 

    end; 
    aRowColor.free; 

end; 

Лучше использовать константное значение вместо «3» в случае столбец изменяется. Дело в том, что эта процедура будет вызываться для всех ячеек, но вы всегда хотите сравнить значение 4-го столбца, независимо от того, какая ячейка в настоящее время нарисована