with   (sender   as   TDBGrid)   do 
    begin 
        if   ((State   =   [gdSelected])   or   (State=[gdSelected,gdFocused]))   then 
        begin 
            Canvas.Font.Color   :=clblack; 
            Canvas.Brush.Color   :=SelectColor; 
        end 
        else   begin 
            if     DataSource1.DataSet.RecNo   mod   2 <> 0   then   {判断当前数据是奇数还是偶数行} 
                Canvas.brush.Color   :=Color1 
            else 
                Canvas.brush.Color   :=Color2; 
        end; 
        Canvas.Font.Color   :=clblack; 
        DefaultDrawColumnCell(Rect,   DataCol,   Column,   State);   {这行很关键的,一定不要遗漏了} 
    end; 类似于这样的代码我已经测试了很多了,但是我在增加新行的时候颜色就全部成为一个颜色了,当重新选择单元格时
颜色又隔行变色了,就是增加状态下不行,貌似以 行号 mod 2=0...都不行
delphi7 dbgrideh网格控件

解决方案 »

  1.   

    去掉下面幾行,看看:
    if ((State = [gdSelected]) or (State=[gdSelected,gdFocused])) then  
      begin  
      Canvas.Font.Color :=clblack;  
      Canvas.Brush.Color :=SelectColor;  
      end  
      

  2.   

    dbgrideh??那你代码中判断sender as TDBGrid干嘛
      

  3.   

    dbgrideh直接设置evenrow,oddrow的颜色即可
      

  4.   


    我后来修改成代码sender as TDBGrideh 可以正常运行
      

  5.   

    我用DBGrid时,也是这样,后来,在代码中判断了一下,如果是新增或是修改状态,就不显示其他颜色了,保存后再重新显示其他颜色。
      

  6.   

    个人感觉,如果在增加或是修改时,ADO的RecNo的值是空或是0。所以在画DBGrid时,就会颜色乱的。除非判断颜色时,不用RecNo。
    这我只是感觉,没试过,有时间试一下。