1.数据库里有个字段s,逻辑值,当值为true时在该行前显示一种图标,false显示一种图标。2.怎么设置dbgrid中单独一行记录的背景颜色?

解决方案 »

  1.   

    你可以使用dbgrid.canvas.stretchdraw(rect,bitmap)
    选三幅图片,用下面的方法在表格中画图
    Tform1.dbgrid1drawcolumncell(sender:tobject;const rect:trect;datecol:integer;column:tcolumn;state:tgriddrawstate);
    var x,y :integer;
    begin
      dbgrid1.canvas.stretchdraw(rect,picture3)//首先将此字段清除在空白
      if comparestr(column.fieldname,'你要画图的字段')=0 then
      begin
        x:=(rect.right-rect.left-picture1.width)div/2
        y:=(rect.bottom-rect.top-picture1.width)div/2
       //如果字段值为true,
        if (column.field.displaytext='true') then
           dbgird1.canvas.draw(rect.left+x,rect.top+y,picture1) 
        else
           dbgird1.canvas.draw(rect.left+x,rect.top+y,picture2) 
        end;
    end;    
    上面只是显示的部分,若想直接修改应编写dbgrid的双击事件
    tform1.dbgrid1dblclick(sender:tobject)
    begin
      dbgrid1.datasource.dataset.edit;
      //将数据取反
      if comparestr(dbgrid1.selectedfield.displaytext,'true')=0 then
        dbgrid1.selectfield.asstring:='false'
      else
        dbgrid1.selectfield.asstring:='true'
      dbgrid1.datasource.dataset.post;
    end;
      
      

  2.   

    改变背景颜色:
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
      Defalt_Color:TColor;
    begin
      Defalt_Color := DBGrid1.Canvas.Brush.Color;
      if ADOQuery1.FieldByName('fparentid').AsInteger=0 then
      begin
        DBGrid1.Canvas.Brush.Color:=clRed;
        DBGrid1.DefaultDrawColumnCell(rect,datacol,Column,state);
      end;
      DBGrid1.Canvas.Brush.Color:=Defalt_Color;
    end;
      

  3.   

    感谢!感谢DainelLee(Iinexperience)。问题1能不能给段带注释的代码?