大家好! 帮我看看
      怎么样才能在程序里动态改变dbgrid行的颜色,不在DBGrid3DrawColumnCell()中改变能行吗?因为我是先查询显示记录后,通过一些比对再确定记录行的颜色,而DBGrid3DrawColumnCell()要在获得记录时就改变了颜色.

解决方案 »

  1.   

    DrawColumnCell := nil;
    // do anything you like
    DrawColumnCell := ChangeFieldColorProcedure;
      

  2.   

    procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if dm.QueryClientinfo.RecNo mod 2=0 then
      begin
        DBGrid1.Canvas.Brush.Color:=rgb(248,251,234);
        dbgrid1.Canvas.Font.Color:=clblack;
      end
      else  begin
        DBGrid1.Canvas.Brush.Color:=rgb(255,255,255);
        dbgrid1.Canvas.Font.Color:=clblack;
      end;
      if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
        begin
           DBGrid1.Canvas.Brush.Color:=RGB(200,210,164);
           DBGrid1.Canvas.FillRect(rect);
           DBGrid1.Canvas.font.color:=clBlack;
        end;
      DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;
    这是奇偶行用不同颜色显示的代码,你改一下就行了!
      

  3.   

    procedure TForm1.ADOQuery1BeforeOpen(DataSet: TDataSet);
    begin
        DBGrid1.OnDrawColumnCell := NIL;
    end;procedure TForm1.ADOQuery1AfterOpen(DataSet: TDataSet);
    begin
    DBGrid1.OnDrawColumnCell := DBGrid1DrawColumnCell;
    end;