Tdatasetにレコードが挿入される時期を決定するにはどうすればよいですか?
-
09-10-2019 - |
質問
私は、Tdatasetまたはtobjectlistのいずれかの内容を表示するグリッドコントロールを書き続けています。 Tdatasetをサポートするだけである場合、事態は非常に簡単です。
- Tdatalinkの子孫を介してデータセットにリンクします。
- グリッドの内容をペイントするときは、そのtdatalinkでバッファリングされたレコードを使用して、必要なものをペイントできます。
- 常にバッファーに行をペイントするだけなので、Tdatasetの行を表すために個々のオブジェクトをどこかに持っている必要はありません。
私の場合、他のいくつかのソースからのデータも受け入れる必要があります。つまり、各行を表すオブジェクトが必要であることを意味します(コントロールにはかなりの行の状態が必要なため)。
しかし、これは上記のモデルに問題を引き起こします。各行を表すオブジェクトがあるため、TDATASETからレコードが追加または削除されたときに通知する必要があります。そして、私はそれを行う方法を見ることができません。
明らかに、私はデータセットイベントに接続したくありません。それらはすでに使用されている可能性があり、Tdatalinkは私のコントロールとデータセットの間のメディエーターであることを意図しています。また、DataEvent Virtualメソッドを使用しようとする私の試みは失敗しました。なぜなら、レコードが追加/削除されているかどうかは単にわかりません。
何か案は?
解決
tdatalinkの子孫をtdatasetに接続しているtdatasourceにフックした場合、データが変更されたときに記録変更された手順で呼び出しが得られます。
Tdatasetに接続されたTdatasourceのOndatachangeとOnupdatedataのイベントを使用できます。
他のヒント
使用するベースデータセットクラスから自分のクラスを導き出す必要があるようです。そこでは、内部addrecord、internalpost、internaldeleteメソッドをオーバーライドし、レコードの追加 /削除を処理する必要があります。