TDataSetまたはTObjectListのいずれかの内容を表示するグリッドコントロールを作成しています。 TDataSetだけをサポートする必要がある場合は、非常に単純です。TDataSetにレコードが挿入された時期を特定するにはどうすればよいですか?
- TDataLinkの子孫を介してデータセットにリンクします。
- グリッドの内容をペイントするときに、そのTDataLinkでバッファされたレコードを使用して、必要なものをペイントすることができます。
- TDataSetの行を表現するために、バッファに行をペイントするだけなので、個々のオブジェクトをどこかに置く必要はありません。
私の場合、他のいくつかのソースからもデータを受け入れる必要があります。つまり、各行を表すオブジェクトが必要でした(コントロールにはかなりの行状態が必要でした)。
しかし、これは上記のモデルで問題を引き起こします。私は各行を表すオブジェクトを持っているので、レコードがTDataSetに追加または削除されるときに通知を受ける必要があります。そして私はちょうどそれを行う方法を見ることができません。
明らかに、私はデータセットイベントにフックしたくありません。それらはすでに使用されている可能性があり、TDataLinkはコントロールとデータセットの間のメディエータになります。また、DataEvent仮想メソッドを使用しようとしても、レコードが追加/削除されているかどうかはわかりません。
アイデア?
RecordChangedは、どのような変更が発生したか教えてくれません。その点については、DataChangedを使用している可能性があります。DataChangedには既にコードがあります。 TDataSetイベントを使用しないのと同じ理由でDataSourceイベントを使用する必要はありません。他のコード(コントロール外)は、イベントポインタの保存に気をつける必要があります。とても素敵ではありません。 –
RecordChangedにはTField引数があります。これは関連するTDataSetの現在のレコードで変更されたフィールドです –
グリッドのユーザーに干渉することなくTDataSourceを使用できます。 1つのTDataSetにリンクされたTDataSourceオブジェクトが多数存在することがあります。 TDataSource.DataSetにDataSetを割り当てます。反対ではありません。したがって、イベントポインタを保存/復元する必要はありません。 –