如DBRird显示:
 A    B   C   (字段名)
 1    0   0   (数  
 2    0   0
 1    1   1    据    )我想将A='2'的那一行的颜色改成其他.
这种情况有办法改吗?

解决方案 »

  1.   

    if Table1.fieldbyname('A').asinteger = 2 then 
         dbgrid1.canvas.font.color := clBlue;
      dbgrid1.defaultdrawcolumncell(rect,datacol.column,state);
      

  2.   

    procedure TBaseStat.dbgrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
     dbgrid1.Canvas.Pen.Mode := pmmask;
      If aqBaseQuery.fieldbyname('a')='2' Then
            Canvas.brush.Color := ClWhite
          else
            Canvas.brush.Color := $00EAEAEA;
        end;
        dbgrid1 .DefaultDrawColumnCell(Rect, DataCol, Column, State);
      End;
      

  3.   

    能不能修改一行的某一个字段的内容,然后整行颜色变啊,不要象上面那样
    aqBaseQuery.fieldbyname('a')='2' ,指定条件才变颜色,我只要修改了哪 一行,哪 一行颜色就跟着改变,这样可以吗?
      

  4.   

    随意控制DBGrid 每一行的颜色:
    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;
      

  5.   

    我在ado中测试成功了,但是bde的我还没有想出解决的方法。
    把adoquery1的locktype设为ltBatchOptimistic ,然后
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if  (DBGrid1.DataSource.DataSet As TCustomADODataSet).RecordStatus = [rsModified] then
        DBGrid1.Canvas.Brush.Color:=CLRed;
      DBGrid1.DefaultDrawColumnCell(Rect,datacol,column,state);
    end;
    但是不要忘了,最后提交是要调用adoquery1.UpdateBatch()
      

  6.   

    在DBGrid的OnDrawColumnCell事件中调用
    procedure DBGridColumnColor(Sender: TObject;const Rect: TRect;
              DataCol: Integer; Column: TColumn;State: TGridDrawState;
              singlecolor:TColor;doublecolor:TColor;selectedcolor:TColor);
    var
      dataset:tdataset;
      dbgrid:tdbgrid;
    begin
      dataset:=TDBGrid(Sender).DataSource.DataSet;
      dbgrid:=TDBGrid(Sender);
      if (dataset.Recno mod 2) <> 0 then  //隔行
         begin
           dbgrid.Canvas.Font.Color := clWhite;
           dbgrid.Canvas.Brush.Color := singlecolor;  //这里设置单元格填充色
           dbgrid.Canvas.FillRect(Rect);  //这里对相应的单元格进行背景色填充
        end
      else
        begin
          dbgrid.Canvas.Font.Color := clWhite;
          dbgrid.Canvas.Brush.Color :=doublecolor;
          dbgrid.Canvas.FillRect(Rect);
        end;  //输出内容
      dbgrid.Canvas.TextRect( Rect, Rect.Left, Rect.Top, Column.Field.DisplayText);
      if gdSelected in State then  //被选中行的颜色
      begin
        dbgrid.Canvas.Brush.Color :=selectedcolor;
        dbgrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
    end;procedure DBGridrowColor(Sender: TObject;const Rect: TRect; DataCol: Integer;
              Column: TColumn;State: TGridDrawState;singlecolor:TColor;
              doublecolor:TColor;selectedcolor:TColor);
    var
      dbgrid:tdbgrid;
    begin
      dbgrid:=TDBGrid(Sender);
      if Odd(Column.Index) then  //隔列
         begin
            dbgrid.Canvas.Font.Color := clWhite;
            dbgrid.Canvas.Brush.Color :=singlecolor;  //这里设置单元格填充色
            dbgrid.Canvas.FillRect(Rect);  //这里对相应的单元格进行背景色填充
         end
      else
         begin
            dbgrid.Canvas.Font.Color := clWhite;
            dbgrid.Canvas.Brush.Color :=doublecolor;  //这里设置单元格填充色
            dbgrid.Canvas.FillRect(Rect);
         end;
      dbgrid.Canvas.TextRect(Rect, Rect.Left, Rect.Top, Column.Field.DisplayText);  if gdSelected in State then  //被选中行的颜色
      begin
        dbgrid.Canvas.Brush.Color :=selectedcolor;
        dbgrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
      end;
    end;
      

  7.   

    BDE的测试也通过了。
    把TABLE1的CACHEDUPDATES 设定为true
    然后:
    procedure TForm1.DBGrid2DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if (table1.UpdateStatus = usModified) then
        DBgrid2.Canvas.Brush.Color :=clREd;
      DBGrid2.DefaultDrawColumnCell(REct,datacol,column,state);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      table1.CommitUpdates;
    end;