//总结:DBgrid中的.colums[i]返回TColumn对象,TColumn对象的属性有:color,font,title
        其中color为背景色,font为字体对象,title返回TcolumnTitle对象,该对象有除也有
        color,font属性外,还有一个Caption属性,用于设置每一列的title的;//====================================================================================
效果:当用户单击DBGrid中的某列时,整列的颜色都改变,同时,选择之外的其他列的颜色
      回复原颜色(省缺为:clwindow)
procedure TForm1.dbgridCellClick(Column: TColumn);
var i:integer;
    selectindex:integer;
    oldcolor : TColor;
begin
  oldcolor := clwindow;
  selectindex := dbgrid.selectedIndex;//保存选择的列号
  for i:= 0 to dbgrid.Columns.count -1 do
      begin
         if i = selectindex then
            dbgrid.columns[i].color := clyellow
         else
            dbgrid.columns[i].color := oldcolor;
      end;
end;
//====================================================================================//总结:DBrgid中的OnDrawColumnCell事件是可以控制DBrgid中每一行的背景颜色和字体颜色和边框颜色
        ,其中就是利用DBgrid中的Canvas来控制,只不过,每次控制是DBGrid中的每一行而尔
  参数说明:rect是当前的Cell矩形框坐标,
            DataCol :是Columns中的Index号
            column  :是Colums对象
            state   :是描述当前的cell的状态:
                     gdSelected  选中
                     gdFocused  得到输入焦点
                     gdFixed  固定CELL   例如:根据查询的结果来决定每行颜色
procedure TForm1.dbgridDrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if query.Active then
  begin
     if query.Fields[1].asstring = 'WWWW' then
        dbgrid.Canvas.brush.color := clred //只有这行是红色,brush用于控制每个cell的背景色
     else
        dbgrid.Canvas.brush.color := clpurple;//其他为紫色
  end;
  dbgrid.DefaultDrawColumnCell(rect,datacol,column,state);//调用省缺的事件,一定要调用
end;

解决方案 »

  1.   

    可以用InfoPower的TwwDbGrid控件,它有一个事件onCalcCellColors可以很简单的以不同的背景颜色区分记录.
      

  2.   

    OnDrawDataCell事件,判断DataSet->RecNo%2是否等于0如果是,设置背景色为白,否则设置为灰色。if (State!=gdSelected)
    {
      TDBGrid *Grid=(TDBGrid*)Sender;  if (DataSet->RecNo%2==0)
        Grid->Canvas->Brush->Color=clWhite;
      else
        Grid->Canvas->Brush->Color=TColor(RGB(245,245,245));  DefaultDrawDataCell(Rect,Field,State);
    }