2012-09-18 78 views
1

我有一个cxGrid,我根据某些字段中的值更改某些字段的背景颜色。 这是所有工作非常好。但是,如果我在网格数据中加入某些东西,则在关闭重新打开表单之前,颜色不会更新。在cxGrid中刷新颜色

如果记录更改,要调用哪个过程来更新此过程?

+1

你问过供应商吗? http://www.devexpress.com/Support/Center/ –

+0

有许多程序,如.UpdateXXX或.InvalidateXXX –

+1

您使用什么事件来改变颜色?行或项目的OnGetContentStyle通常都会起作用。 –

回答

2

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

检查方法,如

  • TcxControl.InvalidateRect
  • TcxControl.InvalidateRgn
  • TcxControl.InvalidateWithChildren

您也可以无效节点:

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

活动等

  • TcxCustomGridTableViewStyles.OnGetContentStyle
  • TcxCustomGridTableItem.OnCustomDrawCell

还公开的那些项目(以及它们的Invalidate方法)之间或内部的参数,如

  • AReco rd:TcxCustomGridRecord;
  • ViewInfo - > TcxGridTableCellViewInfo.GridRecord

换句话说 - 打开cxTL单元和grep为 “无效” 字样,并注意每一场比赛。

+2

OP在讨论** cxGrid **,而不是cxList。 ;-) –

+0

该死的,我无法让我的经验匹配帮助文件 - 我看错了组件:-) –

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;