1

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

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

4

3 回答 3

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 查找“无效”单词并记下每个匹配项。

于 2012-09-18T12:16:44.170 回答
1

如果您的网格附加到数据集,并且数据集中的数据发生更改,则会自动调用 OnGetContentStyle 事件。确保您的数据集知道数据已更新。听起来您的编辑表单并没有告诉网格数据集自行刷新。您可以通过回调过程或实现观察者模式来做到这一点。

以下代码演示了如何为网格列实现 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;
于 2012-09-19T16:26:33.997 回答
0

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

于 2019-03-21T11:16:05.233 回答