procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);
begin
 if gdSelected in State then Exit;
 if Query1.RecNo mod 2 = 0 then
   (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk //定义背景颜色
 else
   (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); //定义背景颜色
 DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;这样的语句写好之后,TDBGrid所有行的颜色都变了,没有达到预期的效果,Query1.RecNO的值是-1,这是怎么回事呀?

解决方案 »

  1.   

    dbgrid中根据任一条件某一格变色。   procedure TForm_main.DBGridEh1DrawColumnCell(Sender: TObject;   const Rect: TRect; DataCol: Integer; Column: TColumnEh;   State: TGridDrawState);   begin     if (trim(DataModule1.ADOQuery1.FieldByName('dczt').AsString)='OK') then     begin       if datacol=6 then       begin         DbGrideh1.Canvas.Brush.Color:=clGradientActiveCaption;         DbGrideh1.DefaultDrawColumnCell(Rect,datacol,column,state);       end;     end;   end;
      

  2.   

    如何在DBGrid中实现奇偶行的颜色变化
    **************************************************************
    type
      TGrid = class(TDBGrid);
      TFormMain = class(TForm)
    ……………………procedure TFormMain.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
         if Dbgrid1.DataSource.DataSet.RecNo  mod 2=0 then
         begin
              DBGrid1.Canvas.Brush.Color:=$00eaeaea;
              DBGrid1.Canvas.FillRect(rect);
              DBGrid1.Canvas.font.color:=clblack;
         end
         else
         begin                           // $E2FBFE
              DBGrid1.Canvas.Brush.Color:=clwhite;
              DBGrid1.Canvas.FillRect(rect);
              DBGrid1.Canvas.font.color:=clblack;
         end;
        if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then
         begin
              DBGrid1.Canvas.Brush.Color:=clinfobk;
              DBGrid1.Canvas.FillRect(rect);
              DBGrid1.Canvas.font.color:=clblack;
         end;
         DBGrid1.DefaultDrawColumnCell(rect,datacol,column,state);end;
      

  3.   

    xixuemao(俺可是㊣②㈧经儿滴人)说的是,
    如果换成wwDBGrid控件更简单,只要设置一下属性即可,不用这么麻烦!
      

  4.   

    北极熊,在DBGrid中实现奇偶行的颜色变化,复制你的代码,运行,效果还是没出来,和没写代码是一样的。
      

  5.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
    DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var RowHeight,Row,i:INteger;
    begin
    RowHeight := Rect.Bottom - Rect.Top+1;
    Row := (Rect.Top div RowHeight);
    if row mod 2= 0 then begindbgrid1.Canvas.Brush.Color:=$00F7FFFF ;// dbgrid1.Canvas.Font.Color:=clred;
    dbgrid1.Canvas.FillRect(rect);
    end
    else begindbgrid1.Canvas.Brush.Color:=$00FFF8F0;//dbgrid1.Canvas.Font.Color:=clblack;
    dbgrid1.Canvas.FillRect(rect);
    //dbgrid1.Canvas.
    end;if (state=[gdFocused,gdSelected] ) or (state=[gdSelected] ) then// or (state=[ gdFocused]) then
    begin
    // for i:=0 to dbgrid1.Columns.Count-1 do
    // begin
    dbgrid1.Canvas.Brush.Color:=clblue;dbgrid1.Canvas.Font.Color:=clWindow;
    dbgrid1.Canvas.FillRect(rect);
    // dbgrid1.Canvas.pen.mode:=pmmask;
    // end;
    end;
    dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
    //DBGrid1.Canvas.TextRect( Rect, Rect.Left, Rect.Top, Column.Field.AsString);
    //dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
    end;
      

  6.   

    自由界面和报表的完美解决方案!
    http://www.anylib.com
      

  7.   

    TGrid = class(TDBGrid);   这句你放到什么地方去了?
      
      

  8.   

    你是贴了代码可是DBGrid1中onDrawColumnCell事件没有关联吧!只要在dbgrid1的ondrawcolumncell那里双击就可以了,哈哈