很多说根据条件在数据网格中显示不同颜色的说法都是在DrawColumnCell事件里,这样显示没有问题,但在ehlib中如果想打印出来可就不行了。
ehlib提供了GetCellParams事件,可以显示和打印
//只能显示,不能打印
procedure TfrmQueryContractInfo.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumnEh;
State: TGridDrawState);
var
OldColor,OldColumnColor:TColor;
v:TColCellParamsEh;
begin
{ OldColor:=DBGrid1.Canvas.Font.Color ;
if (Column.Field.FieldName = '填制调单时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应发货时间').AsDateTime) then
begin
//v:=TColCellParamsEh.Create ;
//Column.GetColCellParams(true,v);
//v.Font.Color :=clRed;
//Column.FillColCellParams(v);
//v.Free;
DBGrid1.Canvas.font.Color := clRed;
end;
//Column.GetColCellParams .FillColCellParams()
if (Column.Field.FieldName = '移交时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('移交时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应移交时间').AsDateTime) then
DBGrid1.Canvas.Font.Color := clRed;
if (Column.Field.FieldName = '填制运输单时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('填制运输单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime) then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
DBGrid1.Canvas.Font.Color:=OldColor;
}
end;
//可以显示,可以打印
procedure TfrmQueryContractInfo.DBGrid1GetCellParams(Sender: TObject;
Column: TColumnEh; AFont: TFont; var Background: TColor;
State: TGridDrawState);
var
OldColor,OldColumnColor:TColor;
v:TColCellParamsEh;
begin
//OldColor:=DBGrid1.Canvas.Font.Color ;
if (Column.Field.FieldName = '填制调单时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应发货时间').AsDateTime) then
AFont.Color := clRed;
if (Column.Field.FieldName = '移交时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('移交时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应移交时间').AsDateTime) then
AFont.Color := clRed;
if (Column.Field.FieldName = '填制运输单时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('填制运输单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime) then
AFont.Color := clRed;
if (Column.Field.FieldName = '实际到货时间') then
if (DBGrid1.DataSource.DataSet.FieldByName('实际到货时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('要求到货时间').AsDateTime) then
AFont.Color := clRed;
//DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
//DBGrid1.Canvas.Font.Color:=OldColor;
end;