如下程序制作的奇偶行颜色变色问题显示时完全正确,但一执行ADOdataset.append即增加一行时奇偶行颜色全恢复成了原来没有以下程序时的相同颜色了,请问如何解决??
 
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;
 
 

解决方案 »

  1.   

    ADOdataset关闭后再打开就可以了
      

  2.   

    Sorry,这个东东我以前搞过, 大概记得是这样. 
    得到的结果与你想要的一样. 不过我是通过改写控件实现的. 我找到后发给你.
      

  3.   

    Adodataset先关再开一定不行,因为它自动会把新增的空行删掉的
      

  4.   

    procedure Tfmwait.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      Case dm.clientdataset1.RecNo mod 2 = 0 of //file://根据数据集的记录号进行判断
      True : DbGrid1.Canvas.Brush.color:=clmoneygreen;// file://偶数行用浅绿色显示 file://奇数行用蓝色表示
    end;
    if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then //file://选中行用红色显示
      DbGrid1.Canvas.Brush.color:=clred;
      DbGrid1.Canvas.pen.mode:=pmMask;
      DbGrid1.DefaultDrawColumnCell (Rect,DataCol,Column,State);  
    end;