select 出来的数据集用Dbgrid显示
如果我想根据其中某一字段的值来决定DBgrid的颜色该如何 ?
比如一个字段:status
如果是 1 ,显示灰色
如果是 0 ,显示白色
请问如何写代码
//谢谢 !

解决方案 »

  1.   

    在DBGRID的DrawColumnCell事件加入
      if status = 1then
       begin
          DBGrid1.Canvas.Brush.Color := 显示灰色;
       end
       else
       begin
          DBGrid1.Canvas.Brush.Color := 显示白色;
       end;
       DBGrid.DefaultDrawColumnCell(Rect,DataCol,Column,State);
      

  2.   

    字段 status 可以直接写 if status=1 then …… 吗?
    是不是要写 if clientdataset.FieldByName('status').AsString='1' then我用的是三层结构的
    客户端的Dbgrid想有这样的显示效果
      

  3.   

    我不知道“status”是个什么东东,如果是表里的一个字段,应该按你的那样写。
      

  4.   

    我在DBGRID的DrawColumnCell事件加入if iclientdataset1.FieldByName('status').AsString='1' then
            begin
            DBGrid1.Canvas.Brush.Color:=cl3Dlight
            end
            else
            begin
            DBGrid1.Canvas.Brush.Color :=clwindow;
            end;
        //DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
        DBGrid1.DefaultDrawDataCell(Rect,Field,State);但是结好像还不行
    Dbgrid没变化
    是不是有什么属性没改好 ?>
      

  5.   

    必须把DBGrid.DefaultDrawing设成FALSE如果还不行,在最后加上DBGrid1.Refresh; 试试。
      

  6.   

    DBGrid.DefaultDrawing 改成False后
    查询出来的结果不能显示
    即,查询出3条记录的时候  Dbgrid显示3行  但是没数据
        查出有10条记录的时候 Dbgrid显示10行  但是各格里没有数据这是什么原因 ?
      

  7.   

    注意:DBGrid1.Refresh;不能加在DrawColumnCell事件里面(其实不加也行)是  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    不是DBGrid1.DefaultDrawDataCell(Rect,Field,State);如果用DefaultDrawDataCell需要在OnDrawDataCell里面写。
      

  8.   

    可能是你的字体的颜色与显示颜色一样
    在IF语句加上
    DBGrid1.Canvas.Font.Color:=clBlack;试试。