DBGrid色づけ

解決


カラフル  2010-02-06 01:17:43  No: 37478  IP: 192.*.*.*

DBGRIDのテーブルのある項目に、「成功」と文字が入っているところの行に色をつけたいと思っています。


DRAWCOLUMNのところに
IF FIELDBYNAME('EXAM').ASSTRING = '成功' THEN
 BEGIN
   CANVAS.BRUSH.COLOR := CLYELLOW;
   DEFAULTDRAWCOLUMNCELL(RECT,DATACOL, COLUMN,STATE;
 END;

と書き、実行しても色が変わりません。アドバイスいただけないでしょうか?

編集 削除
Kenny  2010-02-06 08:49:13  No: 37479  IP: 192.*.*.*

これでどうですか? DBGridの名前はそちらに合わせてくださいね。

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Column.Field.AsString= '成功' then
    DBGrid1.Canvas.Brush.Color:= clYellow;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

編集 削除
Kenny  2010-02-06 10:10:01  No: 37480  IP: 192.*.*.*

ちょいと訂正。
「成功」が入っているセルだけの色を変えるなら
begin
  if Column.Field.AsString= '成功' then begin
    DBGrid1.Canvas.Brush.Color:= clYellow;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State)
  end
end;

「成功」が特定のセルに入っている場合、行全部の色を変えるなら
begin
  if Column.Field.DataSet.Fields[どこか].AsString  ='成功' then begin
    DBGrid1.Canvas.Brush.Color:=clYellow;
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end
end;

ですね。この場合の「Fields[どこか]」は、値「成功」を納めているFieldを指定してください。

編集 削除
カラフル  2010-02-06 10:59:56  No: 37481  IP: 192.*.*.*

助かります。
ちなみに、DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);は何を意味しているのでしょうか?参考書などにも載っていたのですが。

編集 削除
Kenny  2010-02-06 11:31:29  No: 37482  IP: 192.*.*.*

>ちなみに、DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);は何を意味しているのでしょうか

DefaultDrawColumnCellイベントは、セルを描くときに発生するのですが、そのタイミングで
Brushの色を変えてももう描いた後なので、もう一度DefaultDrawColumnCellを呼び出して描き直す
訳です。たぶん(^^;。
試しにその行をコメントアウトすると何も起きなくなりますね。

編集 削除
カラフル  2010-02-11 15:30:34  No: 37483  IP: 192.*.*.*

記述どおりに実行したら、うまくいきました。ありがとうございました。

編集 削除