我有一列只有“是”和“否”值。
我想要如果列值为“是”,则只有单元格背景颜色为红色
否则“否”则背景颜色为黄色
但这段代码为整行着色:
if ADOTable1.FieldByName('Clubs').AsString = 'yes' then
begin
DBGrid1.Canvas.Brush.Color := clRed;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
EDIT
感谢您的回复。
我真正的代码看起来像这样。 “netice”列只有“L、D、W”。
if Column.FieldName = 'netice' then
begin
if ADOTable1.FieldByName('netice').AsString = 'L' then
DBGrid1.Canvas.Brush.Color := clgreen ;
if ADOTable1.FieldByName('netice').AsString = 'D' then
DBGrid1.Canvas.Brush.Color := clRed ;
if ADOTable1.FieldByName('netice').AsString = 'W' then
DBGrid1.Canvas.Brush.Color := clYellow ;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
但我需要 L-绿色、D-红色、W-黄色
我使用的是德尔福2010。
您需要添加一个条件来限制画笔颜色仅更改为您选择的列。在代码中可能是:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Field: TField;
begin
// store the currently rendered cell's column assigned field reference
// (if any) to the local variable (there's quite expensive getter)
Field := Column.Field;
// if the rendered cell's column has assigned a field and this field's
// name is 'Clubs' (compared without case sensitivity), then, and only
// then change the brush color...
if Assigned(Field) and SameText(Field.FieldName, 'Clubs') then
begin
if Field.AsString = 'yes' then
DBGrid1.Canvas.Brush.Color := clRed
else
DBGrid1.Canvas.Brush.Color := clYellow;
end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
我之前更喜欢这个Column.FieldName
因为Column.FieldName
尚不保证链接数据集中存在这样的字段。因此,以这种方式直接访问现场更加安全。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)