我用DBGrids显示DB中数据,在程序启动的后,怎么能实现把偶数的那一条记录变成灰色的.
   比如:
     在程序启动后,DBGrids中显示6条DB中的数据,我要的效果是,第一条不变颜色,第二条灰色,第三天不变颜色,第四条变灰色,依此类推.

解决方案 »

  1.   

    .
                  .
    DBGrid.DefaultDrawing   :=   false;
                  .
                  .
                  .
    procedure   TFormMain.DBGridDrawColumnCell(Sender:   TObject;
        const   Rect:   TRect;   DataCol:   Integer;   Column:   TColumn;
        State:   TGridDrawState);
    begin
            if   (iRowID   =   奇数)   then//iRowID为全局整型变量,此处判据你应该会写
                DBGrid.Canvas.Font.Color   :=   clRed;
            else
                DBGrid.Canvas.Font.Color   :=   clBlue;
            DBGrid.DefaultDrawDataCell(Rect,   Column.Field,   State);
            Inc(iRowID);   
    end;
      

  2.   

    或者不用全局变量iRowID,直接通过判断DataSource.DataSet.RecNo
    如:
      if (Table1.RecNo mod 2 ) =0 then
      

  3.   

    实战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   每一行的颜色:
    Var
    p   :   Integer;
    begin
    p   :=   Table1.FindField('wage').AsInteger;
    //取得当前记录的Wage字段的值。
    if(p   <   500)   then   begin   
    //程序将根据wage值设置各行的颜色。
    Color   :=   clGreen;
    Font.Style   :=   [fsItalic];   
    //不仅可以改变颜色,还可以改变字体
    end;
    if     (p   >=   500)   And   (p   <   800)   then
    Color   :=   clRed;
    if(p   >=800)   then   begin
    Color   :=   clMaroon;
    Font.Style   :=   [fsBold];
    end;
    end;
      

  4.   

    with (Sender as TDBGrid) do
    begin
        if  DataSource.DataSet.RecNo  mod  2=1  then
        begin
            Canvas.Font.Color:= clNone;
            Canvas.Brush.Color:= clCream;
        end
        else  begin
            Canvas.Font.Color:= clNone;
            Canvas.Brush.Color:= clInactiveCaptionText;
        end;
        DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;
      

  5.   

    state是状态,又不用你处理,你只需要判断啊,DBGridDrawColumnCell过程里面已经处理好状态了