刷新cxGrid中的颜色

时间:2012-09-18 09:03:00

标签: delphi devexpress tcxgrid

我有一个cxGrid,我根据某些字段中的值更改某些字段的背景颜色。 这一切都很好。但是,如果我在网格数据中添加某些内容,则在关闭重新打开表单之前不会更新颜色。

如果记录发生变化,调用什么程序来更新?

3 个答案:

答案 0 :(得分:2)

根据我的经验,当你切换行时它会更新。但是我在带有TClientDataSet的DB模式下使用它。

检查

等方法
  • TcxControl.InvalidateRect
  • TcxControl.InvalidateRgn
  • TcxControl.InvalidateWithChildren

您也可以使节点无效:

  • TcxGrid.ActiveView.Invalidate;
  • TcxGrid.ViewData.Records [0] .Invalidate;
  • TcxGridViewData.Rows [0] .Invalidate
  • TcxCustomGridTableController.FocusedRecord.Invalidate;

等活动
  • TcxCustomGridTableViewStyles.OnGetContentStyle
  • TcxCustomGridTableItem.OnCustomDrawCell

还会在参数之中或之内公开这些项目(使用其Invalidate方法),例如

  • ARecord:TcxCustomGridRecord;
  • ViewInfo - > TcxGridTableCellViewInfo.GridRecord

换句话说 - 打开cxTL单位并grep“无效”单词并记下每场比赛。

答案 1 :(得分:1)

如果网格附加到数据集,并且数据集中的数据发生更改,则会自动调用OnGetContentStyle事件。确保您的数据集知道数据已更新。听起来您的编辑表单并没有告诉栅格数据集刷新自己。您可以使用回调程序或实施Observer Pattern

来执行此操作

以下代码演示了如何为网格列实现OnGetContentStyle事件。

procedure TFormWithGrid.cxGrid1DBTableView1LASTNAMEStylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; var AStyle: TcxStyle);
begin
  if ARecord.Values[cxGrid1DBTableView1FIRSTNAME.Index] = 'test' then
  begin
    AStyle := TcxStyle.Create(nil);
    AStyle.Color := clRed;
    AStyle.Font.Style := [fsBold];
  end;
end;

答案 2 :(得分:0)

在我的情况下,这会起作用 cxGridDBTblVwContenido.DataController.Refresh;