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 ユニットを開き、"invalidate" 単語を 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 に答える