項目のデータリンククラスの更新

提供: RAD Studio
移動先: 案内検索

コントロールをデータ対応にする:インデックス への移動

データ変更には以下の 2 種類があります。

  • データベース対応コントロールに反映しなければならない項目値の変更
  • 項目値に反映しなければならないデータベース対応コントロールの変更

TDBCalendar コンポーネントは,データセット内の項目値が変更されたときにその変更値を CalendarDate プロパティに代入する DataChange メソッドをすでに持っています。DataChange メソッドは,OnDataChange イベント用のハンドラです。したがって,カレンダーコンポーネントは最初の種類のデータ変更を処理できます。

同様に項目のデータリンククラスは,コントロールのユーザーがデータベース対応コントロールの内容を変更したときに発生する OnUpdateData イベントも持っています。カレンダーコントロールは,OnUpdateData イベントのイベントハンドラになる UpdateData メソッドを持っています。UpdateData メソッドはデータベース対応コントロールの変更値を項目のデータリンクに代入します。

項目値のカレンダーの値への変更を反映する手順は次のとおりです。

  1. UpdateData メソッドをカレンダーコンポーネントの private 部に追加します。
 type
   TDBCalendar = class(TSampleCalendar);
   private
     procedure UpdateData(Sender: TObject);
    .
    .
    .
   end;
 class PACKAGE TDBCalendar : public TSampleCalendar
 {
 private:
     void __fastcall UpdateData(TObject *Sender);
 };
  1. UpdateData メソッドを実装します。
 procedure UpdateData(Sender: TObject);
 begin
   FDataLink.Field.AsDateTime := CalendarDate;        { 項目のリンクをカレンダー日付に設定する }
 end;
 void __fastcall TDBCalendar::UpdateData( TObject* Sender)
 {
     FDataLink->Field->AsDateTime = CalendarDate;     // 項目のリンクをカレンダー日付に設定する
 }
  1. 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 を割り当てる
 }