OnFilterRecord イベントのハンドラの記述
フィルタの作成 への移動
レコードが取得されるたびにデータセットで生成される Data.DB.TDataSet.OnFilterRecord イベントを使って、レコードをフィルタ処理するコードを記述できます。このイベント ハンドラでは、指定されたレコードをアプリケーションでの表示対象に含めるかどうかを決める検査を実行します。
レコードがフィルタ条件に一致しているかどうかを示すために、OnFilterRecord イベントのハンドラでは、Accept パラメータを True に設定してレコードを受け入れるか、False に設定してレコードを除外します。たとえば、次のフィルタでは、State フィールドが "CA" に設定されているレコードだけを表示します。
procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean); begin Accept := DataSet['State'].AsString = 'CA'; end;
void __fastcall TForm1::Table1FilterRecord(TDataSet *DataSet; bool &Accept) { Accept = DataSet->FieldByName["State"]->AsString == "CA"; }
フィルタ処理を有効にすると、レコードを取得するたびに OnFilterRecord イベントが発生します。イベント ハンドラで各レコードが検査され、フィルタ条件を満たすレコードだけが表示されます。OnFilterRecord イベントはデータセット内のすべてのレコードに対して発生するので、パフォーマンスに悪影響を及ぼさないように、このイベント ハンドラは、できるだけ簡潔に記述しておかなければなりません。
OnFilterRecord イベント ハンドラは、いくつでも必要なだけ記述しておき、実行時に切り替えることができます。たとえば、次の文では、NewYorkFilter という OnFilterRecord イベント ハンドラに切り替えています。
DataSet1.OnFilterRecord := NewYorkFilter; Refresh;
DataSet1->OnFilterRecord = NewYorkFilter; ()