表内容:
shebeibh    shebeimc  ...
910100101   AAAAAAA
910100102   AAAAAAB
910100103   AAABBBB
910100201   CCCCCCC
910100301   DDDDDDD
910100302   CDCDCDD
...现在的问题是:要根据shebeibh的前七位是否相同而改变整行的颜色,即
910100101   AAAAAAA
910100102   AAAAAAB
910100103   AAABBBB
这三行是一种颜色
910100201   CCCCCCC
是另一种颜色
910100301   DDDDDDD
910100302   CDCDCDD
又恢复为第一种颜色
显示已经order by shebeibh 了

解决方案 »

  1.   

    var
    AYellowStyle: TcxStyle;
    ARedStyle:TcxStyle;
    prvrecord:integer=0;//保存上一记录shebeibh的前7位值
    chcorlor:integer=0;//变色procedure TForm1.FormCreate(Sender: TObject);
    begin
     //行颜色
    AYellowStyle := TcxStyle.Create(Self);
    AYellowStyle.Color := $0080FFFF;
    AYellowStyle.TextColor := clMaroon;
     //行颜色
    ARedStyle := TcxStyle.Create(Self);
    ARedStyle.Color := $000000FB;
    ARedStyle.TextColor := clMaroon;
    end;procedure TForm1.cxGrid1DBBandedTableView1StylesGetContentStyle(
    Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
    AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
    begin
    if strtoint(Copy(ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index],1,7))>prvrecord then
    begin
        chcorlor:=chcorlor+1;
        if (chcorlor mod 2)=0 then
            AStyle := AYellowStyle
        else
            AStyle := ARedStyle;
      
      prvrecord:=strtoint(Copy(ARecord.Values[cxGrid1DBBandedTableView1Lengthcm.Index],1,7)); 
    end
    else
    begin
        if (chcorlor mod 2)=0 then
            AStyle := AYellowStyle
        else
            AStyle := ARedStyle;
    end;
    end;以上是从别人做的CxGrid变色例子稍作修改,没有调试,出错不要见怪
      

  2.   

    http://www.delphibbs.com/keylife/iblog_show.asp?xid=4091 DBGrid 应用全书(全面修订正在进行时)
      

  3.   

    >>现在的问题是:要根据shebeibh的前七位是否相同而改变整行的颜色,即看我給你的, 很簡單就可實現的
      

  4.   

    var bh :array of string;
        i:integer;
        count:integer;
        color: array of Tcolor;
    第一步。先把不同的shebeibh查找出来。
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add('select distinct shebeibh from table');
    adoquery1.open;
    count:=adoquery1.recordcount;//记录数;
    adoquery1.first;
    while not adoquery1.eof do
     begin
       bh[i]:=copy(adoquery1['shebeibh'],1,7);  //保存不同的编号的前七位;
       adoquery1.next; 
    end;
    第二步在
     procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);里写代码判断:
    var i:integer;
    begin  
      for i:=0 to count do //每一个i值代表一种颜色;
         if copy(datasource1.DataSet.FieldByName('shebeibh').Asstring,1,7)=bh[i]
         //判断前七位是否相同
      then 
          begin
           dbgrid1.Canvas.Brush.Color:=color[i]
           dbgrid1.Canvas.Brush.Color:=color[i];
           DBGrid1.Canvas.FillRect(Rect);
           dbgrid1.Canvas.Font.Color:=Clred;
           DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
          end    
      end;
     end;