如何使dbgrid中奇数行与偶数行颜色不同

解决方案 »

  1.   

    1、在dbgrid连接的dataSet设置一个序号(Id)字段
    2、在dbgrid的CalcCellColors事件中进行判定,若id为偶数,设置ABrush.Color:=clblue,否则ABrush.Color:=clRed;
      

  2.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
     if (DataCol div 2) = 0 then
     begin
        dbgrid1.canvas.brush.color:=clyellow;  //整条记录颜色
        dbgrid1.canvas.font.color:=clblue;   //字体颜色
        dbgrid1.canvas.fillrect(rect);
        dbgrid1.defauldrawcolumncell(rect,datacol,column,state);
      end
      else begin 
        dbgrid1.canvas.brush.color:=clblue;  //整条记录颜色
        dbgrid1.canvas.font.color:=clblue;   //字体颜色
        dbgrid1.canvas.fillrect(rect);
        dbgrid1.defauldrawcolumncell(rect,datacol,column,state);
      end;
    end;
    end;
      

  3.   

    RecNo :procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if ADOQuery1.RecNo mod 2 = 1 then
        dbgrid1.Canvas.Brush.Color := clRed
      else
        dbgrid1.Canvas.Brush.Color := clBlue;
      dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;
      

  4.   

    第一位:繁琐
    第二位:方向错误,DataCol是列。
    第三位:最好把ADOQuery1改成 TDbGrid(Sender).DataSource.DataSet
      

  5.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if( gdSelected in State)then
      //如果是被选中的  
      begin
        DBGrid1.Canvas.Brush.Color:=clBlue;
        //选中的背景色为clBlue
        DBGrid1.Canvas.Font.Color:=clYellow;
        //选中的字体颜色为clYellow
      end
      else
      if self.DataSource1.DataSet.RecNo mod 2=1 then
         //用self.DataSource1.DataSet.RecNo mod 2
         //来判断行数产生隔行
        DbGrid1.Canvas.Brush.Color:=clRed
      else 
        DBGrid1.CanVas.Brush.Color:=clWhite;
      
      DBGrid1.DefaultDrawcolumnCell(rect,DataCol,Column,State);
      //其他默认
    end;
      

  6.   

    第三位:最好把ADOQuery1改成 TDbGrid(Sender).DataSource.DataSet有道理:),通用
      

  7.   

    呵呵,其实编程也不难,用控件更容易!Ehlib永远是首选!