項目のデータリンククラスの更新
データ変更には以下の 2 種類があります。
- データベース対応コントロールに反映しなければならない項目値の変更
- 項目値に反映しなければならないデータベース対応コントロールの変更
TDBCalendar コンポーネントは,データセット内の項目値が変更されたときにその変更値を CalendarDate プロパティに代入する DataChange メソッドをすでに持っています。DataChange メソッドは,OnDataChange イベント用のハンドラです。したがって,カレンダーコンポーネントは最初の種類のデータ変更を処理できます。
同様に項目のデータリンククラスは,コントロールのユーザーがデータベース対応コントロールの内容を変更したときに発生する OnUpdateData イベントも持っています。カレンダーコントロールは,OnUpdateData イベントのイベントハンドラになる UpdateData メソッドを持っています。UpdateData メソッドはデータベース対応コントロールの変更値を項目のデータリンクに代入します。
項目値のカレンダーの値への変更を反映する手順は次のとおりです。
- UpdateData メソッドをカレンダーコンポーネントの private 部に追加します。
type
TDBCalendar = class(TSampleCalendar);
private
procedure UpdateData(Sender: TObject);
.
.
.
end;
class PACKAGE TDBCalendar : public TSampleCalendar
{
private:
void __fastcall UpdateData(TObject *Sender);
};
- UpdateData メソッドを実装します。
procedure UpdateData(Sender: TObject);
begin
FDataLink.Field.AsDateTime := CalendarDate; { 項目のリンクをカレンダー日付に設定する }
end;
void __fastcall TDBCalendar::UpdateData( TObject* Sender)
{
FDataLink->Field->AsDateTime = CalendarDate; // 項目のリンクをカレンダー日付に設定する
}
- TDBCalendar のコンストラクタ内で,OnUpdateData イベントに UpdateData メソッドを割り当てます。
constructor TDBCalendar.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FReadOnly := True;
FDataLink := TFieldDataLink.Create;
FDataLink.OnDataChange := DataChange;
FDataLink.OnUpdateData := UpdateData;
end;
__fastcall TDBCalendar::TDBCalendar(TComponent* Owner)
: TSampleCalendar(Owner)
{
FDataLink = new TFieldDataLink(); // 元からある文
FDataLink->OnDataChange = DataChange; // これも元からある文
FDataLink->OnUpdateData = UpdateData; // OnUpdateData イベントに UpdateData を割り当てる
}