请问我建有一个SQL SERVER 2000的数据库,里面有一个表WZGLK,其中有三个字段:ZDKCL(最低库存量)、ZGKCL(最高库存量)、KC_SL(库存数量),在DBGridEH中显示该表时我想让KC_SL小于ZDKCL的那些记录的KC_SL值以红色的字来显示,让KC_SL大于ZGKCL的那些记录的KC_SL值以蓝色的字来显示,介于二者之间的那些记录以黑色的字来显示,可以实现吗?具体该怎么做?谢谢!

解决方案 »

  1.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if Column.Field=tblWZGLKKC_SL then
      begin
        if tblWZGLKKC_SL .value < tblWZGLKZDKCL then
    DBGrid1.Canvas.Font.Color := clred
        else 
        if  tblWZGLKKC_SL .value > tblWZGLKZGKCL then
            DBGrid1.Canvas.Font.Color := clblue;
      end;
      DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
      

  2.   

    DBGridEH可以跟DBGrid一样进行这样处理吗?
      

  3.   

    一样处理,都在DrawColumnCell事件中写
      

  4.   

    但是这样做的结果却是把整行字(所有满足条件的记录)都变成红色了哟,我是想只把满足条件的记录的当前KC_SL的值(当前单元格)的字显示为红色,该怎么做?谢谢!
      

  5.   

    procedure TF_JGZS.DBGridEh2DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
      var
         ///
       i:integer;
       str_dx:string;
    begin
         for i:=1 to (DBGridEh2.columns.Count-2) do
           begin
               str_dx:=trim(ADO_WXtable.Fields[i+1].FieldName);         
               if (DataCol =i)and(ADO_WXtable.FieldByName(str_dx).Value = '相同') then
                             begin
                               DBGridEh2.Canvas.Font.Color := clBlack;
                               DBGridEh2.Canvas.Brush.Color := clBlue;
                               DBGridEh2.DefaultDrawColumnCellRect,DataCol,Column,State);
                             end;
                                 end;
    end;
      

  6.   

    procedure TF_JGZS.DBGridEh2DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
      var
         ///
       i:integer;
       str_dx:string;
    begin
         for i:=1 to (DBGridEh2.columns.Count-2) do
           begin
               str_dx:=trim(ADO_WXtable.Fields[i+1].FieldName);         
               if (DataCol =i)and(ADO_WXtable.FieldByName(str_dx).Value = '相同') then
                             begin
                               DBGridEh2.Canvas.Font.Color := clBlack;
                               DBGridEh2.Canvas.Brush.Color := clBlue;
                               DBGridEh2.DefaultDrawColumnCellRect,DataCol,Column,State);
                             end;
                                 end;
    end;