これは少し複雑なので、我慢してください。
TDataset.Edit
を呼び出しSetState(dsEdit);
ます。DataEvent(deUpdateState, 0);
TDataSet.DataEvent
のパラメーターで呼び出されたdeUpdateState
場合、データセットでコントロールを無効にしたdeLayoutChange
場合、コントロールが再度有効になったときにイベントを送信するフラグを設定します。ドキュメントによると、「データのレイアウトデータベース対応コントロールが変更されました。」
再有効化されるコントロールがデータ バインド グリッドである場合、非常にコストのかかるリセットが発生し、グリッド全体を再レイアウトする必要があります。多数の行と列を含む大規模なデータセットでは、グリッドのレイアウトに影響するコントロールが無効になっている間に何もしなかった場合でも、これには数秒かかることがあります。
これが起こらないようにする方法はありますか? SetState
仮想ではありません。 DataEvent
仮想ですが、FEnableEvent
これを設定するために使用するフィールドには、派生クラスからアクセスできません。ひどいハッキングなしにこれを回避する方法はないようです。(RTTI手術、オーバーレイクラスなど)それをうまくやってのけるより良い方法を知っている人はいますか?