有列字段,名为累计额。我想当些字段中负数的单元格在显示时为红色,正数的就为黑色,我在此事件里写:
procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
begin
if (adoquery2.FieldValues['addupSum']<0) and (adoquery2.State<>dsEdit) then
  begin
  dbgridEh1.Columns[3].font.color:=clred;
  dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
  end
else
  begin
  dbgridEh1.Canvas.Font.Color:=clblack;
  dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
  end;end;但是问题来了,当有记录是负数的时,我修改任意一条记录的“累计额”这一单元格的值都会是输入红色的字,但按回车后又恢复黑字。谁能告诉怎么不让它变红字呢?

解决方案 »

  1.   

    dbgridEh1.Canvas.Font.Color:=clblack;你这句是不是加上:
        if (gdSelected in State) then      dbgridEh1.Canvas.Font.Color := clblack;
        dbgridEh1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
      

  2.   

    你这里的代码写得也不对吧:
      begin
      dbgridEh1.Columns[3].font.color:=clred;
      dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
      end
    else
      begin
      dbgridEh1.Canvas.Font.Color:=clblack;
      dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
      end;
      

  3.   

    procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
    begin
      if (adoquery2.FieldValues['addupSum']<0) and (adoquery2.State<>dsEdit) then
        dbgridEh1.Columns[3].font.color:=clred;
      else
       dbgridEh1.Canvas.Font.Color:=clblack;  if (gdSelected in State) then
        Column.Font.Color := clblack;
        dbgridEh1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;这样看看行不行吧!
      

  4.   


    if (adoquery2.FieldValues['addupSum']<0) and (adoquery2.State<>dsEdit) then
      begin
      dbgridEh1.Columns[3].font.color:=clred;
      dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
      end
    else
      begin
      dbgridEh1.Canvas.Font.Color:=clblack;
      dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
    end;if DBGridEh1.DataSource.DataSet.State in [dsEdit, dsInsert] then
    begin
      dbgridEh1.Canvas.Font.Color:=clGrean;
      dbgridEh1.InplaceEditor.Brush.Color:=clGrean;
      dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
    end;//这样行吗?
      

  5.   

    procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
    begin
    if (adoquery2.FieldValues['addupSum']<0) and (adoquery2.State=dsBrowse) then
      begin
      dbgridEh1.Columns[3].font.color:=clred;
      dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
      end
    else
      begin
      dbgridEh1.Canvas.Font.Color:=clblack;
      dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
      end;end;
      

  6.   

    我想这不是解决的方法,事件在修改时好像发生在DBGridEh1DrawColumnCell之前,唯一的办法是把我的下面这个事件换另一种方法。
    if (adoquery2.FieldValues['addupSum']<0) and (adoquery2.State<>dsEdit) then
      begin
      dbgridEh1.Columns[3].font.color:=clred;
      dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
      end
    else
      begin
      dbgridEh1.Canvas.Font.Color:=clblack;
      dbgridEh1.DefaultDrawColumnCell(rect,DataCol,Column,State);
    end;