如何在DBGrid中每隔一行将其背景颜色显示为不同的颜色?
也就是说,单行显示红色,双行显示绿色(比如这么做吧)。
或者说,当我单击某一格时,将整行都加亮,这又该如何做?

解决方案 »

  1.   

    procedure TForm1.DBGrid8DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var i :integer;
    begin
    if gdSelected in State then Exit;
    for i :=0 to (Sender as TDBGrid).Columns.Count-1 do
    begin
    (Sender as TDBGrid).Columns[i].Title.Font.Name :='宋體'; ^
    (Sender as TDBGrid).Columns[i].Title.Font.Size :=12; 
    (Sender as TDBGrid).Columns[i].Title.Font.Color :=clNavy;  
    (Sender as TDBGrid).Columns[i].Title.Color :=$00FFC4C4;  
    end;
    if query1.RecNo mod 2 = 0 then
    (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk  
    else
    (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); 
    DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    with (Sender as TDBGrid).Canvas do  begin
    Pen.Color := $00ff0000;  
    MoveTo(Rect.Left, Rect.Bottom);  
    LineTo(Rect.Right, Rect.Bottom);  
    Pen.Color := clTeal;  
    MoveTo(Rect.Right, Rect.Top);  
    LineTo(Rect.Right, Rect.Bottom);  
    end;
    end;
      

  2.   

    在 DBGrid。Onpaint 里边写:
      

  3.   

    当我单击某一格时,将整行都加亮:设DBGrid的Options的dgRowSelect为True;何在DBGrid中每隔一行将其背景颜色显示为不同的颜色?
    也就是说,单行显示红色,双行显示绿色:写程序了。
      

  4.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      case form1.DBGrid1.DataSource.DataSet.RecNo mod 2=0 of
        true:form1.DBGrid1.Canvas.Brush.Color:=clblue;
        false:form1.DBGrid1.Canvas.Brush.Color:=claqua;
      end;
      if not form1.DBGrid1.SelectedRows.CurrentRowSelected then
        form1.DBGrid1.Canvas.Brush.Color:=clred;
      form1.DBGrid1.Canvas.Pen.Mode:=pmmask;
      form1.DBGrid1.DefaultDrawColumnCell(rect,datacol,column,state);
    end;
      

  5.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
     DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
     if( gdSelected in State)then
     //如果是被选中的  
     begin
       DBGrid1.Canvas.Brush.Color:=clBlue;
       //选中的背景色为clBlue
       DBGrid1.Canvas.Font.Color:=clYellow;
       //选中的字体颜色为clYellow
     end
     else
     if self.DataSource1.DataSet.RecNo mod 2=1 then
        //用self.DataSource1.DataSet.RecNo mod 2
        //来判断行数产生隔行
       DbGrid1.Canvas.Brush.Color:=clRed
     else 
       DBGrid1.CanVas.Brush.Color:=clWhite;
     
     DBGrid1.DefaultDrawcolumnCell(rect,DataCol,Column,State);
     //其他默认
    end;
      

  6.   

    错了,应该是
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      case form1.DBGrid1.DataSource.DataSet.RecNo mod 2=0 of
        true:form1.DBGrid1.Canvas.Brush.Color:=clblue;
        false:form1.DBGrid1.Canvas.Brush.Color:=claqua;
      end;
      form1.DBGrid1.Canvas.Pen.Mode:=pmmask;
      form1.DBGrid1.DefaultDrawColumnCell(rect,datacol,column,state);
    end;
      

  7.   

    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;