adoquery1有一个字段:name,值有:A、B、C...
DBgrid已按name字段排序,现在要使所有行中按name值不同行颜色不同(交错),比如所有name值为A的行为灰色,name值为B的行为白色,所有name值为C的行又为灰色,按错进行改变 DBgrid背景色。

解决方案 »

  1.   

    表如下id name  
    1   A
    2   A
    3   B
    4   C
    5   C
    7   C
    8   D 
    9   D
    .....
      

  2.   

    在DBGrid的OnDrawDataCell自己绘。最好定义两个全局变量用来存放上一条的name值和颜色。假设为:
    LastName: String;
    LastColor: TColor;//如果是第一行,初始化。if DBGrid1.DataSource.DataSet.RecNo = 0 then
    begin
      LastName := Field.AsString;
      LastColor := clGreen;
    end;if Field.AsString <> LastName then
      if lastColor = clGreen then 
        LastColor := clRed
      else
        LastColor := clGreen;
    DBGrid1.Canvas.Brush.Color := LastColor;
    DBGrid1.Canvas.FillRect(Rect);
    DBGrid1.Canvas.Font.Color := clBlack;
    DBGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, Field.AsString);
    LastName := Field.AsString;
      

  3.   

    If Query.fieldbyname("字段名").values 满足条件 then
      Begin
        Dbgrid.Canvas.Brush.Color := 颜色(如:clInfoBk) ;
        Dbgrid.DefaultDrawColumnCell( Rect, DataCol, Column, [gdFixed,gdFocused,gdSelected] );
      End ;
      

  4.   

    按nadel(风色幻想) 的方法,各行的颜色变得杂乱无章,没有达到要求。
      

  5.   

    if not Highlight then
      if Trim(Field.DataSet.FieldByName('字段名').AsString) = 'A' then
      begin
        ABrush.Color := $00E5E5E5;
      end;