dbgrid 里怎么设置 行的颜色 谢谢

解决方案 »

  1.   

    写一函数,你参考:procedure TForm1.ColoredDBGrid1 DRawColoredDBGrid
      (Sender: TObject; Field: TField; var Color:
      TColor; var Font: TFont);
    var
      p: Integer;
    begin
      p := Table1.FindField('wage').AsInteger;
      //取得当前记录的Wage字段的值。
      if (p > 500) then
      begin
        //程序将根据wage值设置各行的颜色。
        Color := clGreen;
        Font.Style := [fsItalic];
        //不仅可以改变颜色,还可以改变字体
      end;
      if (p >= 500) and (p < 800) then
        Color := clRed;
      if (p >= 800) then
      begin
        Color := clMaroon;
        Font.Style := [fsBold];
      end;
    end;
      

  2.   

    procedure TCardQueryForm.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    var
    field :TField;
    dataset :TDataSet;
    important:string;
    ishow:integer;
    begin
      dataset := DBGrid1.DataSource.DataSet;
      field:=dataset.FieldByName('seqno');
      important:=field.AsString;
      ishow :=StrtoInt(important);
      if ishow<=10 then
      begin
        DBGrid1.Canvas.Font.Color:=clRed;
      end
      else if ishow<=20 then
      begin
        DBGrid1.Canvas.Font.Color:=clBlue;
      end
      else if ishow<=30 then
      begin
        DBGrid1.Canvas.Font.Color:=clGreen;
      end else
      begin
        DBGrid1.Canvas.Font.Color:=clYellow;
      end;
      DBGrid1.DefaultDrawColumnCell(rect,DataCol,column,state);
    end;改变选中行颜色:
    先将dbgrid的dgrowselected属性设为true;然后在dbgrid的DrawColumnCel事件里写:
    procedure TFrmQuery.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
    if gdSelected  in state then
        dbgrid1.Canvas.Brush.Color:=clgreen;
         dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);end;
    不同内容显示不同颜色:
    procedure TFrmDetail.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    var
    s:string;
    begin
      s:=frmmain.adoquery2.FieldByName('状态').AsString;
      if s='停发' then  DBGrid1.Canvas.Font.Color:=clRed
      else if s='已发' then  DBGrid1.Canvas.Font.Color:=clGreen;
      DBGrid1.DefaultDrawColumnCell(rect,DataCol,column,state);end;
      

  3.   

    谢谢大家的指教 上面的我都知道 我的意思是有N行的表格但只有2种颜色 也就是A,B,A,B ....色一直排下来 判断颜色不用数据里的值来判断
      

  4.   

    if (DataSet.RecNo mod 2) = 0 then
          Grid.Canvas.Brush.Color := BrshClrOdd    //  奇数行颜色
        else
          Grid.Canvas.Brush.Color := BrshClrEven;  //  偶数行颜色
      

  5.   

    昨天刚写过,
    在query或table
    DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    if (adoquery1.RecNo mod 2) = 0 then
          Grid.Canvas.Brush.Color := BrshClrOdd    //  奇数行颜色
        else
          Grid.Canvas.Brush.Color := BrshClrEven;  //  偶数行颜色
            DBGrid1.DefaultDrawColumnCell(rect,DataCol,column,state);
      

  6.   

    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if  (not (state=[gdFocused])) then
      begin
        if  (not (state=[gdSelected])) or (not (self.ActiveControl=dbgrid1)) or (not self.Active) then
        begin
          with adoquery1 do
          begin
            if uppercase(Column.FieldName)=uppercase('TEST') then
            begin
               if fieldbyname('TEST').AsString<>adoquery2.fieldbyname('TEST').AsString then
               begin
                 dbgrid1.Canvas.brush.Color :=$00FEF3DE;
                 dbgrid1.Canvas.Font.Color:=clred;
               end;
            end;
      dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;