我有个按钮事件对ADOQUERY下的一条记录做了修改,怎样才能使我dbgrid下对应的这条记录改变颜色呢?

解决方案 »

  1.   

    procedure TfrmBalanceChanged.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
    if 是你修改的记录 then
      begin
        DBGrid1.Canvas.Font.Color:=clRed;
        DBGrid1.Canvas.Brush.Color:=RGB(221, 255, 255);
      end;
      DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;
      

  2.   

    修改的记录要做一个标记
    然后:
    if FieldByName('BZ').Assting = 'xx' then  //区别是否修改
      ....  // 同楼上
      

  3.   

    下面的代码可以改变任意单元格的字体、背景颜色procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if (DataCol = 1)and(ADOTable1.FieldByName('UserName').Value = 'Administrator') then
      begin
        DBGrid1.Canvas.Font.Color := clRed;
        DBGrid1.Canvas.Brush.Color := clLime;
      end;
      DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;以上代码仅把第一列(从零列开始),第UserName='Administgrator'行的单元格的字体颜色改为红色,背景颜色改为亮绿色
      

  4.   

    if FieldByName('数量').Asinteger <=0 then // 数量<=0的数据DBGrid1.Canvas.Font.Color:=clRed;//红色提示。关键是DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State)这一句。
      

  5.   

    //如果用缓存更新可以参考如下代码`~~function VarIsEqual(mVar1, mVar2: Variant): Boolean; { 返回两个变体值是否相等 }
    var
      vType1, vType2: TVarType;
      I: Integer;
      vVarLow1, vVarLow2: Integer;
      vVarHigh1, vVarHigh2: Integer;
    begin
      Result := False;
      vType1 := VarType(mVar1);
      vType2 := VarType(mVar2);
      if vType1 <> vType2 then Exit;
      if vType1 and varArray <> 0 then begin
        vVarLow1 := VarArrayLowBound(mVar1, VarArrayDimCount(mVar1));
        vVarLow2 := VarArrayLowBound(mVar2, VarArrayDimCount(mVar2));
        if vVarLow1 <> vVarLow2 then Exit;
        vVarHigh1 := VarArrayHighBound(mVar1, VarArrayDimCount(mVar1));
        vVarHigh2 := VarArrayHighBound(mVar2, VarArrayDimCount(mVar2));
        if vVarHigh1 <> vVarHigh2 then Exit;
        for I := vVarLow1 to vVarHigh1 do
          if not VarIsEqual(mVar1[I], mVar2[I]) then Exit;
        Result := True;
      end else Result := VarCompareValue(mVar1, mVar2) = vrEqual;
    end; { VarIsEqual }procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if Assigned(Column.Field) and
        not VarIsEqual(Column.Field.NewValue, Column.Field.OldValue) then begin
        TDBGrid(Sender).Canvas.Font.Color := clRed;
        TDBGrid(Sender).Canvas.Brush.Color := clLime;
      end;
      TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;