Mise à jour de la classe lien de données sur un champ

De RAD Studio
Aller à : navigation, rechercher

Remonter à Contrôles orientés données - Index

Il existe deux types de modification des données :

  • Le changement de la valeur d'un champ doit se répercuter dans le contrôle orienté données
  • Le changement dans le contrôle orienté données doit se répercuter dans la valeur du champ

Le composant TDBCalendar a déjà une méthode DataChange qui gère les modifications de la valeur du champ dans l'ensemble de données en assignant cette valeur à la propriété CalendarDate. La méthode DataChange est le gestionnaire de l'événement OnDataChange. Ainsi le composant calendrier est capable de gérer le premier type de modification des données.

De manière semblable, la classe lien de données sur un champ a aussi un événement OnUpdateData qui se produit lorsque l'utilisateur modifie le contenu du contrôle orienté données. Le contrôle calendrier a une méthode UpdateData qui devient le gestionnaire de l'événement OnUpdateData. UpdateData assigne au champ lien de données la valeur modifiée dans le contrôle orienté données.

Pour répercuter dans la valeur du champ une modification effectuée sur la valeur du calendrier :

  1. Ajoutez une méthode UpdateData à la section private du composant calendrier :
 type
   TDBCalendar = class(TSampleCalendar);
   private
     procedure UpdateData(Sender: TObject);
    .
    .
    .
   end;
 class PACKAGE TDBCalendar : public TSampleCalendar
 {
 private:
     void __fastcall UpdateData(TObject *Sender);
 };
  1. Implémentez la méthode UpdateData :
 procedure UpdateData(Sender: TObject);
 begin
   FDataLink.Field.AsDateTime := CalendarDate;        { définir le champ lien par la date du calendrier }
 end;
 void __fastcall TDBCalendar::UpdateData( TObject* Sender)
 {
     FDataLink->Field->AsDateTime = CalendarDate;     // définit le champ par la date du calendrier
 }
  1. Dans le constructeur de TDBCalendar, affectez la méthode UpdateData à l'événement OnUpdateData :
 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();       // déjà ici
   FDataLink->OnDataChange = DataChange;   // également déjà ici
   FDataLink->OnUpdateData = UpdateData;   // Affecte UpdateData à l'événement OnUpdateData
 }