• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 811
  • Last Modified:

DBGrid & row color

I have a field with nexts possible values : 'o' , '' or 'n'. I wish that in my DBGrid to show with green rows all lines what have 'o' value assigned, red for 'n' and white for ''.

Attention, I wish all ROW colored and NOT only CELL where is displayed 'o' or 'n'.
0
ginsonic
Asked:
ginsonic
  • 4
  • 3
1 Solution
 
shaneholmesCommented:
 begin
    { Set default font color }
    DBGrid1.Canvas.Font.Color := clBlack;
    { Is current cell the focused cell? }
    if (gdFocused in State) then begin
      DBGrid1.Canvas.Brush.Color := clBlack;
      DBGrid1.Canvas.Font.Color := clWhite;
    end
    { Not focused, is it the target field Terms? }
    else if (Field.FieldName = MYFIELDNAMEHERE) then
      { Check field content for one of two possible values }
      if (Field.AsString = 'o') then
        { If field contains "o" paint  green}
        DBGrid1.Canvas.Brush.Color := clGreen
      else
        { If field contains "n" paint red }
        DBGrid1.Canvas.Brush.Color := clPaleRed
    else
      { Paint non-focused and non-target cells white }
      DBGrid1.Canvas.Brush.Color := clWhite;
       DBGrid1.DefaultDrawDataCell(Rect, Field, State);
  end;

Shane
0
 
shaneholmesCommented:
Oops, the code should be place in the TDBGrids OnDrawDataCell event

see the entir article here:

http://community.borland.com/article/0,1410,20845,00.html

Shane
0
 
Ferruccio AccalaiSenior developer, analyst and customer assistance Commented:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
  Field: TField; State: TGridDrawState);
begin
if TDBGrid(Sender).DataSource.DataSet.FieldByName('ThisField').AsString ='n'  then begin
    DBGrid1.Canvas.Brush.Color := clRed;
    DBGrid1.Canvas.Font.Color := clYellow;
    end  else
    if TDBGrid(Sender).DataSource.DataSet.FieldByName('ThisField').AsString ='o' then begin
    DBGrid1.Canvas.Brush.Color := clgreen;
    DBGrid1.Canvas.Font.Color := clWhite;
    end else
    if TDBGrid(Sender).DataSource.DataSet.FieldByName('ThisField').AsString ='' then begin
    DBGrid1.Canvas.Brush.Color := clwhite;
    DBGrid1.Canvas.Font.Color := clblack;
    end;
  DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
ginsonicAuthor Commented:
Attention, I wish all ROW colored and NOT only CELL where is displayed 'o' or 'n'.

Your code change the color just for cell. This can be done more easier in DrawColumn.
0
 
ginsonicAuthor Commented:
The message was for shaneholmes :)
0
 
shaneholmesCommented:
sorry, i extrapolated from the link i provided, and didn't change everything that was appropriate to your question

it could have easily been changed to test the fieldbyname versus each individual field

if (DBGrid1.FieldByName = MYFIELDNAMEHERE) = '0' then
        DBGrid1.Canvas.Brush.Color := clGreen
      else
if (DBGrid1.FieldByName = MYFIELDNAMEHERE) = '1' then
          DBGrid1.Canvas.Brush.Color := clPaleRed


Oh well, you win some, you loose some

Shane
0
 
ginsonicAuthor Commented:
Still color just a cell.

I have a new problem. In my project I have a DBGrid with specified columns. When I test these comments I used a demo project where I show all fields. In this case all work perfect.

But when I ported the demo code to my app don't work. Look alike DrawCell isn't called when I declare some columns. Some help here? New 250 points available.
0
 
ginsonicAuthor Commented:
Found already a way in DrawColumn event. Thanks for support!
0

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now