2016-04-26 3 views
1

ユーザーが日付を入力するグリッドがいくつかあり、date-intervalが他の行date-intervalと重なる行に背景色を設定します。すべての行のデータに基づいてcxGridのスタイルを設定します。

オーバーラップフラグを設定するためにデータセットでoncalcイベントを使用していますが、それは遅い解決策です。代わりにcxGridで解決可能かどうかを知りたいのですが。

オベB-)

+0

おそらく、フラグを計算するアルゴリズムがもっと良いかもしれませんが、グリッド(またはビジュアルコンポーネント)がそれを処理するとは思いません。 –

+0

私の主張はデータがあることです。そのため、onCalcイベントのデータベースへの別の旅行の代わりに、ローカルデータを使用して重複をチェックする方が良いでしょう。 onCalcイベントでデータセットを巧みに使いこなそうとしましたが、すぐにonCalcイベントのデータセットをめちゃくちゃにするのが悪いことを学びました:) データベースにトリガーが入ることがあります。 –

+0

OnCalcイベントのコードを表示できますか? –

答えて

1

私は今あなたがこの検証をしたいと思っているかわからないが、あなたは重複し、多分目に見えないを使用するすべてのレコードがあるかどうかを確認するために、グリッドデータセットを反復処理することができますアンバウンド列をフラグとして返します。

var 
I, ARecordIndex: Integer; 
begin 
    for I := 0 to cxGrid1DBTableView1.DataController.FilteredRecordCount - 1 do 
    begin 
     ARecordIndex := cxGrid1DBTableView1.DataController.FilteredRecordIndex[I]; 
     if (Pos('ame2', cxGrid1DBTableView1.DataController.Values[ARecordIndex, cxGrid1DBTableView1Name.Index]) <> 0) then 
     cxGrid1DBTableView1.DataController.FocusedRecordIndex := ARecordIndex; 
    end; 
end; 
+0

コードをありがとう:)私は行とセルを横断する方法を探していた。残念ながら、それは間違ったトラックで私を長く保ちました。しかし、それはそのような特定の質問をするための価格です。 FireDACは、自身で更新可能なクエリであっても、基礎となるテーブルを更新できることを発見しました。だから私はSQLのフィールドを計算し、一緒にすべてのOnCalcを取り除いた:) –

2

私はあなたがかなりstraightfoward方法でこれを行うことができるはずだと思います。実際に cxGridはデータ行のグループ化を行うことができ、 グルーピングモードの切り替えが可能であると、グリッドにデータセットがロードされると、グループ化、グループ解除、並べ替えに必要なすべてのデータが含まれます。グリッドは を持たずに関連するデータセットを再トラバースできます。データは、DBTableViewのDataControllerのValuesプロパティからアクセスできます。あなたはそれが二次元配列または行列であるかのように を(他の回答やcxGridのオンラインヘルプを参照してください)、その関連DataControllerのValuesプロパティ を経由して、グリッドにDBTableViewのデータ行にアクセスすることができ

- 最初にディメンションはグリッドの行 で、第2のグリッドの列値のインデックスです。私はあなたのタスクは、行が 色付けする方法を示すために、データセットにfkInternalCalcフラグフィールドを追加します

  • になり試みる方法

    。 OnCalcFieldsイベントでその値を設定する必要はありません。また、OnCalcFields内のその他のものを する必要はありません。計算されたフィールド を含む理由は、 が「バインドされていない」グリッド列に関与することなく、Values []値を持つ簡単な方法です。データがグリッドにロードされると

  • 、2Dアレイのようなプロセスは 行は特別に着色する必要があるうまくと計算フィールド

  • 使用DBTableViewのに対する値[エントリー]を設定しますOnCustomDrawCellイベントを使用して、必要に応じてセルの色を設定します。

これは、実装の詳細を微調整する必要がありますが、原則として動作するはずです。

NB:これは、DataControllerのIsGridModeプロパティがFalseに設定されている場合にのみ機能します。 Trueに設定すると、データセットの行のサブセットのみが一度にロードされるため、 グリッドはグループ化されず、の2D表示を使用してデータセット全体を処理することはできません。 DataControllerのValuesプロパティ。

0

私は@ Rigottiのコードの解決策に最も近づきました。しかし、私はOnCalc、OnDataChange、OnGetContentStyleを管理する方法が見つけられませんでした。それは多くを引き起こした。

FireDACに切り替えたのはずいぶん前のことですが、自分でクエリが更新可能でなくても、元のテーブルを更新できるようになったことに気づいていませんでした。だから私はSQLのフィールドを計算し、OnCalcは必要ありませんでした。

関連する問題