DBGridEh 显示数据后,如何判断值改变该单元格的颜色if DataSource.DataSet.FieldByName('User').Value = '' then
begin
  
  //改变该单元格的背景色
end;请问这个要怎么写,谢谢。

解决方案 »

  1.   

    参照下面
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if Column.Field.fieldname = 'FieldName' then
      begin
        if (trim(column.Field.Value) = 'FieldVaue') then
        begin
          DBGrid1.canvas.font.Color := clblue;
          DBGrid1.Canvas.Brush.Color := clbtnface;
          DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
        end;
      end
    end;
      

  2.   


    procedure TForm1.DBGridEh1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    begin
      if Field.FieldName <> 'User' then Exit;
      if ADOQuery1.FieldByName('User').AsString = '' then
      begin
        DBGridEh1.Canvas.Brush.Color := clRed;
        DBGridEh1.Canvas.FillRect(Rect);
        DBGridEh1.Canvas.TextOut(Rect.Left,Rect.Top,ADOQuery1.FieldByName(Field.FieldName).AsString);
      end;
    end;
      

  3.   

    DBGrid1.canvas.font.Color := clblue; 
    控制满足条件的字体颜色
    DBGrid1.Canvas.Brush.Color := clbtnface; 
    控制了该列(整个列的所有单元格)背景颜色先谢谢MAJAPG ,虽然没有解决问题,继续请教。
      

  4.   

    那个可以的,关键下面在这句
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); 
    你调试一下就知道了。
      

  5.   

    DBGridEh.Canvas.Brush.Color:=RGB(50,150,100);
    DBGridEh.DefaultDrawColumnCell(rect,datacol,column,state);
      

  6.   

    TO: bdmh 
    DrawDataCell跟踪里面的事件,不能触发
    DefaultDrawing有设置为 True
      

  7.   

    我用的是默认设置
    检查是否有'User' 字段名,区分大小写
      

  8.   

    TO: bdmh
    if Field.FieldName <> 'User' then Exit;
    我是对这句就设置了断点调试,它没有跳到这里来
    'User' 这个字段是有的。并且保证大小写没有错哦。
      

  9.   

    谢谢各位,可以了
    调整后的全部代码
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
      DataCol: Integer; Column: TColumn; State: TGridDrawState); 
    begin 
      if Column.Field.fieldname = 'User' then 
      begin 
        if column.Field.Value = Null then 
        begin 
          DBGrid1.canvas.font.Color := clblue; 
          DBGrid1.Canvas.Brush.Color := clbtnface; 
          DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); 
        end; 
      end 
    end;
      

  10.   

    另外我想请教,如果在上面的代码再调整一下
     if Column.Field.fieldname = 'User' then 判断这一列,
     不单对这列满足条件的单元格改颜色,还改第5列、第6列的背景色呢。