1

TDataSet または TObjectList の内容を表示するグリッド コントロールを作成しています。TDataSet のみをサポートする必要がある場合、物事は非常に単純です。

  1. TDataLink の子孫を介してデータセットにリンクします。
  2. グリッドのコンテンツを描画する場合、その TDataLink にバッファリングされたレコードを使用して、必要なものを描画できます。
  3. TDataSet 内の行を表すために個別のオブジェクトをどこかに置く必要はありません。これは、常にバッファ内の行を描画するだけだからです。

私の場合、他のいくつかのソースからもデータを受け入れる必要があります。つまり、各行を表すオブジェクトが必要でした (これも、コントロールにかなりの数の行の状態が必要だったためです)。

しかし、これは上記のモデルで問題を引き起こします。各行を表すオブジェクトがあるため、TDataSet でレコードが追加または削除されたときに通知を受ける必要があります。そして、私はそれを行う方法がわかりません。

明らかに、データセット イベントにフックしたくありません。それらは既に使用されている可能性があり、TDataLink はコントロールとデータセットの間のメディエーターになることを意図しています。また、DataEvent 仮想メソッドを使用しようとしても失敗しました。レコードが追加/削除されているかどうかがわからないためです。

何か案は?

4

2 に答える 2

1

TDataLinkの子孫をTDataSetに接続されているTDataSourceにフックすると、データが変更されたときにRecordChangedプロシージャで呼び出しが発生します。

TDataSetに接続されたTDataSourceのイベントOnDataChangeおよびOnUpdateDataを使用できます。

于 2011-01-11T10:39:08.307 に答える
0

使用する基本データセット クラスから独自のクラスを派生させる必要があるようです。そこでは、InternalAddRecord、InternalPost、InternalDelete メソッドをオーバーライドし、レコードの追加/削除を処理する必要があります。

于 2011-01-11T09:32:03.343 に答える