如何動態更新DBGrid每一格子的顏色(50分)

  • 主题发起人 主题发起人 江林勝
  • 开始时间 开始时间

江林勝

Unregistered / Unconfirmed
GUEST, unregistred user!
大家會覺得這是一個老問題:我用以下方法,得到的是整個
一條記錄變為蘭色,而不是name這個字段.
procedure TForm1.DBGrd1DrawColumnCell(....);
Begin
if Table1.FieldByName('Name').asString:='JlS' then
DBGrid1.Canvas.Font.Color:=clBlue;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
End;
請教各位,若我只想改變dbgrid某一行中的某個字段的顏
色,我該怎樣做.
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.FieldName ='Name') and (Column.Field.AsString='JlS') then
begin
DBGrid1.Canvas.Font.Color := clBlue;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Column.Field.AsString);
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;
 
agree 英国病人
 
好像以前在哪里看到过的,记不清了.不是电脑报就是计算机世界
找一个现成的控件吧
有空的话可以自己写一个
 
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
if (Field.FieldName='name') AND (Field.AsString='JIS') then
begin
with (Sender as TDBGrid).Canvas do
begin
FillRect(Rect);
Font.Color:=CLRED;
TextOut(Rect.Right-TextWidth(Field.AsString)-3,Rect.Top+3, Field.AsString)
end;
end;
end;
 
我这有一个日本鬼子开发的控件FIXDBgrid,可以实现。只需定义OnSetCellColor事件就行了。
 
多人接受答案了。
 
后退
顶部