关于dxDBGrid  的使用方法,如何让某一行的字体的颜色为红色。在表中有一个字段为“tpye”,当“tpye”值为“0”时,dxDBGrid  的那一行不变化,当“tpye”值为“1”时这一行的字体的颜色为红色。如:
tpye
  1
  0
  0
  0
  1
  1
  1
dxDBGrid 显示的数据为:
(括车内为字体颜色)
tpye
  1   (红色)
  0   (黑色)
  0   (黑色)
  0   (黑色)
  1  (红色)
  1  (红色)
  1  (红色)

解决方案 »

  1.   

    如表中tpye值:
    tpye  
       1  
       0  
       0  
       0  
       1  
       1  
       1  
      

  2.   

    如果dxDBGrid不分组:
    procedure TForm1.dxDBGrid1CustomDrawCell(Sender: TObject; ACanvas: TCanvas;
      ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxTreeListColumn;
      ASelected, AFocused, ANewItemRow: Boolean; var AText: string;
      var AColor: TColor; AFont: TFont; var AAlignment: TAlignment;
      var ADone: Boolean);
    begin
      if ANode.Values[i] = 1 then
      begin
        AColor := clRed;
      end;
    end;i为你的type字段在dxDBGrid中的位置,第一列为0,依此类推
      

  3.   

    如果dxDBGrid采用了分组,那么以上方法就不行了,会出错。因为这时候不管你ANode.Values[i]中i为什么值,结果总是分组那一列的值。不知有没有高手解决了这个问题。我采用了一个笨办法实现了颜色的变化,虽然笨,但效果还凑合。
    在变色条件列上写该列的一个事件:
    procedure TForm1.dxDBGrid1typeCustomDrawCell(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
      AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
      var AText: String; var AColor: TColor; AFont: TFont;
      var AAlignment: TAlignment; var ADone: Boolean);
    begin
      if ANode.Values[i] = 1 then
      begin
        AColor := clRed;
      end;
    end;
    这样,type这一列的颜色就达到要求了;
    接下来,把所有列的CustomDrawCell事件都关联到dxDBGrid1typeCustomDrawCell事件,OK!
      

  4.   

    当然,第二种情况,把事件写在列事件CustomDraw里面也可以
      

  5.   

    procedure Tfrm_yljg_cx.dxGridCustomDrawCell(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
      AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
      var AText: string; var AColor: TColor; AFont: TFont;
      var AAlignment: TAlignment; var ADone: Boolean);
    begin
      inherited;
      if ANode.Strings[dg.ColumnByName('dgColumn13').Index] = '0' then
      AColor:=clFuchsia;
    end;
      

  6.   

    procedure Tcw_jiesuanForm.AllJieSuanDBGridCustomDrawCell(Sender: TObject;
      ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
      AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
      var AText: String; var AColor: TColor; AFont: TFont;
      var AAlignment: TAlignment; var ADone: Boolean);
    var
      Value: Variant;
    begin
    {
      clBlack = TColor($000000);
      clMaroon = TColor($000080);
      clGreen = TColor($008000);
      clOlive = TColor($008080);
      clNavy = TColor($800000);
      clPurple = TColor($800080);
      clTeal = TColor($808000);
      clGray = TColor($808080);
      clSilver = TColor($C0C0C0);
      clRed = TColor($0000FF);
      clLime = TColor($00FF00);
      clYellow = TColor($00FFFF);
      clBlue = TColor($FF0000);
      clFuchsia = TColor($FF00FF);
      clAqua = TColor($FFFF00);
      clLtGray = TColor($C0C0C0);
      clDkGray = TColor($808080);
      clWhite = TColor($FFFFFF);
      StandardColorsCount = 16;  clMoneyGreen = TColor($C0DCC0);
      clSkyBlue = TColor($F0CAA6);
      clCream = TColor($F0FBFF);
      clMedGray = TColor($A4A0A0);
      ExtendedColorsCount = 4;  clNone = TColor($1FFFFFFF);
      clDefault = TColor($20000000);
    }
      if ANode.HasChildren then
        Exit;
      if not ASelected and (AColumn = TYPE) then
      begin
        Value := ANode.Values[AColumn.Index];
        if (not VarIsNull(Value) )  and  Value =1 then 
                 AColor := clRed  //or       AColor :=  $0000FF 
      end;
    end;