在DBGRID表格中显示这样的数据:
name  t1  t2   t3
木    3   15   18
铁    2   8    9
我只想改变数据为单数的背景色,我看了前些日子的贴子,但还是不明白,请各位帮忙!

解决方案 »

  1.   

    将DBGrid的DefaultDrawing设为False;procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      if Column.Field.DataType = ftInteger then
        if DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsInteger mod 2 <> 0 then
          DBGrid1.Canvas.Brush.Color := clRed;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  2.   

    忘记说了,表格中的数字是字符型的,wx1452兄!以上的ifcolumn...语句不能运行.
      

  3.   

    不好意思,忘了说了
    在Implementation下加一
    uses DB;
      

  4.   

    ok!基本搞点!想问一下,如只想让数据等于一个集合是(02,12。23,24,29)时才改变颜色,怎样定义这个集合,type....我就是搞不点,请多多指教!!!
      

  5.   

    那就这样
    if Column.Field.DataType = ftInteger then
        if DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsInteger
          in [02,12,23,24,29] then
       ....
      

  6.   

    我用的是字符型,我是这样写的:.....(Column.FieldName).Asstring in ['02','12','23','24','29']then ,if Column.Field.DataType = ftInteger then中的ftinteger 已改成ftstring, 但却不行,
      

  7.   

    字符串不能用作集合里的,只能是有序类型
    而且这个有序类型的值还不能超过255
    可以这样const
      cStrArray: array[0..4] of String = 
        ('02', '12', '23', '24', '29');然后写一函数
      function IsInStrArray(const S: string): Boolean;
      var
        I: Integer;
      begin
        Result := False;
        for I := Low(cStrArray) to High(cStrArray) do
          if S = cStrArray[I] then
          begin 
            Result := True;
            Exit;
          end; 
      end;
     然后
    if Column.Field.DataType = ftString then
        if IsInStrArray(DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsString) then
      ...
      

  8.   

    我是这样写的,但还不行,不知错在哪里,请指教!!!
    procedure Tfr_jjfenxi.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      if Column.Field.DataType= ftstring then
        if IsInStrArray(DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsString) then
         DBGrid1.Canvas.Brush.Color := clRed;
         DBGrid1.Canvas.Font.Color:=clWhite;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
    function IsInStrArray(const S: string): Boolean;
      var
        I: Integer;
      const
      cStrArray: array[0..4] of String =('01','02','07','08','12');
      begin
        Result := False;
        for I := Low(cStrArray) to High(cStrArray) do
          if S = cStrArray[I] then
          begin 
            Result := True;
            Exit;
          end; 
      end;
      

  9.   

    procedure Tfr_jjfenxi.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      if Column.Field.DataType= ftstring then
        if IsInStrArray(DBGrid1.DataSource.DataSet.FieldByName(Column.FieldName).AsString) then
        begin
           DBGrid1.Canvas.Brush.Color := clRed;
           DBGrid1.Canvas.Font.Color:=clWhite;  
        end;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  10.   

    我写函数写的地方对吗?为什么出现:Undeclared identifier:'IsInStrArray'的错误?
      

  11.   

    原来是这样
    function IsInStrArray(const S: string): Boolean;
      var
        I: Integer;
      const
      cStrArray: array[0..4] of String =('01','02','07','08','12');
      begin
        Result := False;
        for I := Low(cStrArray) to High(cStrArray) do
          if S = cStrArray[I] then
          begin 
            Result := True;
            Exit;
          end; 
      end;放在
    procedure Tfr_jjfenxi.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);的前面或function IsInStrArray(const S: string): Boolean;放在Interface部分
      

  12.   

    OK
    呵呵
    不谢
    oni兄
    你也是
    新年快乐