dbgrid 设置  dbgrid1.option.dgrowselect:=true
实现行斑马线效果,选中行蓝色显示,现在有个问题,选中行的第一列颜色没变成蓝色 其他是蓝色,请高手指教原因?
procedure TForm2.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if   ADOQuery1.RecNo   mod   2   =   0   then
  (Sender   as   TDBGrid).Canvas.Brush.Color   :=   clWhite   //定义背景颜色
  else
  (Sender   as   TDBGrid).Canvas.Brush.Color   :=   clScrollBar;
  if (State = [gdSelected] ) then
  begin
    (Sender   as   TDBGrid).Canvas.Brush.Color   :=  clBlue;
  end;
  DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
end;

解决方案 »

  1.   

    dbgrid1.option.dgrowselect:=true 这句不就是全行选中么?
      

  2.   

    procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      if ((Sender as TDbGrid).DataSource.DataSet.RecNo mod 2) = 0 then
        (Sender as TDbGrid).Canvas.Brush.Color := clCream  //Brush.Color := $00FFFFC1;
      else
        (Sender as TDbGrid).Canvas.Brush.Color := clWhite;
      if ((State = [gdSelected]) or (State = [gdSelected, gdFocused])) and
        (not (Sender as TDbGrid).SelectedRows.CurrentRowSelected) then
        (Sender as TDbGrid).Canvas.Brush.Color := clHighlight;
      (Sender as TDbGrid).DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  3.   

    因为你固定了一列,即fixedcols=1,固定列有它自己的颜色
      

  4.   

    5. 为你要的答案~~~~主  题: Delphi数据网格(DbGrid)色彩特效   
      实战Delphi数据网格色彩特效  Delphi中的数据网格控件(TDbGrid)对于显示和编辑数
    据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为
    表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它
    的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。  以下为
    数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。1.   纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示,以区别相邻的数
    据列。 
     
    file://在DbGrid的DrawColumnCell事件中编写如下代码:
    Case   DataCol   Mod   2   =   0   of   
    True:   DbGrid1.Canvas.Brush.Color:=   clBlue;   
    file://偶数列用蓝色   
    False:   DbGrid1.Canvas.Brush.Color:=   clAqua;   
    file://奇数列用浅绿色  
    End;  DbGrid1.Canvas.Pen.Mode:=pmMask;  
    DbGrid1.DefaultDrawColumnCell   (Rect,   DataCol,   Column,   State);2.   纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。 
     
    file://将上述代码修改为:  
    Case   DataCol   Mod   2   =   0   of   
    True:   DbGrid1.Canvas.Brush.Color:=   clBlue;   
    file://偶数列用蓝色   
    False:   DbGrid1.Canvas.Brush.Color:=   clAqua;   
    file://奇数列用浅绿色  End;  
    If   ((State   =   [gdSelected])   or   (State=[gdSelected,gdFocused]))   then    
    If   Not   DbGrid1.SelectedRows.CurrentRowSelected   then      
    DbGrid1.Canvas.Brush.Color:=clRed;   
    file://当前选中单元格显示红色      
    DbGrid1.Canvas.Pen.Mode:=pmMask;      
    DbGrid1.DefaultDrawColumnCell   (Rect,   DataCol,   Column,   State);上述两种方法突出了列的显示效果。
    3.在数据网格中以红色突出显示当前选中的行:  
    设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景
    色),   在DbGrid的DrawColumnCell事件中编写如下代码: 
     
    if   ((State   =   [gdSelected])   or   (State=[gdSelected,gdFocused]))   then   
    DbGrid1.Canvas.Brush.color:=clRed;   
    file://当前行以红色显示,其它行使用背景的浅绿色   
    DbGrid1.Canvas.pen.mode:=pmmask;   
    DbGrid1.DefaultDrawColumnCell   (Rect,   DataCol,   Column,   State);
    4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。  file://其它属性设置同3,将上述代码修改为:  
    if   ((State   =   [gdSelected])   or   (State=[gdSelected,gdFocused]))   then   
    begin    
    Case   DataCol   Mod   2   =   0   of     
    True   :   DbGrid1.Canvas.Brush.color:=clRed;   
    file://当前选中行的偶数列显示红色     
    False:   DbGrid1.Canvas.Brush.color:=clblue;   
    file://当前选中行的奇数列显示蓝色    
    end;   DbGrid1.Canvas.pen.mode:=pmmask;   
    DbGrid1.DefaultDrawColumnCell   (Rect,   DataCol,   Column,   State);  
    end;5.横向斑马线,同时以红色突显当前行效果: 
     
    file://其它属性设置同3,将上述代码修改为:  
    Case   Table1.RecNo   mod   2   =   0   of   
    file://根据数据集的记录号进行判断   
    True   :   DbGrid1.Canvas.Brush.color:=clAqua;   
    file://偶数行用浅绿色显示   
    False:   DbGrid1.Canvas.Brush.color:=clblue;   
    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);6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。 
     
    file://其它属性设置同
    3,将上述代码修改为:  
    Case   Table1.RecNo   mod   2   =   0   of   
    file://根据数据集的记录号进行判断   
    True   :   DbGrid1.Canvas.Brush.color:=clAqua;   
    file://偶数行用浅绿色显示   
    False:   DbGrid1.Canvas.Brush.color:=   clblue;   
    file://奇数行用蓝色表示  
    end;  
    If   ((State   =   [gdSelected])   or   (State=[gdSelected,gdFocused]))   then  
    Case   DataCol   mod   2   =   0   of   
    True   :   DbGrid1.Canvas.Brush.color:=clRed;   
    file://当前选中行的偶数列用红色   
    False:   DbGrid1.Canvas.Brush.color:=   clGreen;   
    file://当前选中行的奇数列用绿色表示  
    end;
    DbGrid1.Canvas.pen.mode:=pmMask;  
    DbGrid1.DefaultDrawColumnCell   (Rect,   DataCol,   Column,   State);7.   随意控制DBGrid   每一行的颜色:Varp   :   Integer;beginp   :=   Table1.FindField('wage').AsInteger;
    //取得当前记录的Wage字段的值。
    if(p   <   500)   then   begin   //程序将根据wage值设置各行的颜色。
    Color   :=   clGreen;Font.Style   :=   [fsItalic];   //不仅可以改变颜色,还可以改变字体
    end;
    if     (p   >=   500)   And   (p   <   800)   thenColor   :=   clRed;if(p   >=800)   then   
    beginColor   :=   clMaroon;Font.Style   :=   [fsBold];
    end;
    end
      

  5.   


    如果你說的沒有問題,應該是你的第一列是FIX列。
    可翠這樣處理,比較簡單,在DBGIRD的第一列增加一列,不要綁定字段,然後將這行的寬度設為0來解決