IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Comment créer dynamiquement des LiveBindings ?


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 74
    Points : 44
    Points
    44
    Par défaut Comment créer dynamiquement des LiveBindings ?
    Bonjour,

    J'ai une application Delphi 10 Seattle, FMX, où de nombreux Controls sont créés dynamiquement.
    Aussi je souhaite relier ces composants par programmation en exploitant les LiveBingings.
    La doc Embarcadero n'est pas très explicite.
    Quelqu'un a-t-il un exemple de code qui montre bien la démarche à suivre ?

    Merci
    Cordialement

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Bah leur tutoriel pas à pas (en 4 étapes), il est plutôt bien fait quand même :
    http://docwiki.embarcadero.com/RADSt...rogramatically

    En tout cas il à l'air
    Bidouilleuse Delphi

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 74
    Points : 44
    Points
    44
    Par défaut
    J'ai suivi l'exemple de code mais il n'est pas complet à mon sens

    J'ai bien d'un côté un TLinkControlToField et de l'autre un TBindingExpression créé par la fonction TBindings.CreateManagedBinding mais je ne trouve pas comment relier les deux.

    Voir programme exemple ci-dessous qui permet aussi de visualiser les Expressions

    Le résultat affiché dans le Memo est le suivant :

    LinkControlToField1
    --> Format: Text - Text
    --> Parse : Text - Text
    --> Clear : nil - Text
    LinkControlToField2

    On voit que les expressions Format, Parse, Clear ne sont pas renseignées pour le lien LinkControlToField2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    unit Unit1;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      System.Bindings.Expression, System.Bindings.ObjEval, System.Bindings.Helper,
      Data.DBXMySQL, Data.DB, Data.FMTBcd, Data.Bind.EngExt, Fmx.Bind.DBEngExt,
      System.Rtti, System.Bindings.Outputs, Data.Bind.Controls, FMX.Layouts,
      FMX.Grid, FMX.ScrollBox, FMX.Memo, FMX.StdCtrls, FMX.Controls.Presentation,
      FMX.Edit, Fmx.Bind.Navigator, Data.Bind.Components, Data.Bind.DBScope,
      Datasnap.DBClient, Datasnap.Provider, Data.Bind.Grid, Data.SqlExpr,
      Fmx.Bind.Grid, Fmx.Bind.Editors;
     
    type
      TForm1 = class(TForm)
        MysqlconnectionConnection: TSQLConnection;
        T_applicationsTable: TSQLDataSet;
        T_applicationsTables_applicationtype: TStringField;
        T_applicationsTables_applicationlabel: TStringField;
        T_applicationsTableS_DatabaseSchema: TStringField;
        BindingsList1: TBindingsList;
        DataSetProvider1: TDataSetProvider;
        ClientDataSet1: TClientDataSet;
        ClientDataSet1s_applicationtype: TStringField;
        ClientDataSet1s_applicationlabel: TStringField;
        BindSourceDB1: TBindSourceDB;
        BindNavigator1: TBindNavigator;
        Edit1: TEdit;
        Edit2: TEdit;
        Button1: TButton;
        Memo1: TMemo;
        StringGrid1: TStringGrid;
        LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;
        LinkControlToField1: TLinkControlToField;
        procedure FormCreate(Sender: TObject);
        procedure BindSourceDB1SubDataSourceDataChange(Sender: TObject;
          Field: TField);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        LinkControlToField2 : TLinkControlToField;
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      ABindingExpression2 : TBindingExpression;
    begin
      LinkControlToField2 := TLinkControlToField.Create(BindingsList1);
      LinkControlToField2.Name := 'LinkControlToField2';
      LinkControlToField2.Category := 'Liaisons rapides';
      LinkControlToField2.DataSource := BindSourceDB1;
      LinkControlToField2.Direction := linkBidirectional;
      LinkControlToField2.Control := Edit2;
      LinkControlToField2.FieldName := 's_applicationlabel';
      LinkControlToField2.AutoActivate := True;
      LinkControlToField2.Track := False;
      LinkControlToField2.BindingsList := BindingsList1;
    // Comment relier ABindingExpression2  au lien LinkControlToField2 ?
      ABindingExpression2 := TBindings.CreateManagedBinding(
        [TBindings.CreateAssociationScope([Associate(BindSourceDB1.DataSet.Fields[0],'O1')])],'O1.Value',
        [TBindings.CreateAssociationScope([Associate(Edit2, 'O2')])],'O2.Text',nil);
    end;
     
    procedure TForm1.BindSourceDB1SubDataSourceDataChange(Sender: TObject;
      Field: TField);
    begin
      TBindings.Notify(BindSourceDB1.DataSet.Fields[0], 'Value');
      TBindings.Notify(BindSourceDB1.DataSet.Fields[1], 'Value');
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      I,J : Integer;
      ALinkControlToField : TLinkControlToField;
    begin
      Memo1.Lines.Clear;
      for I := 0 to BindingsList1.BindCompCount-1 do
      begin
        if BindingsList1.BindComps[I] is TLinkControlToField then
        begin
          ALinkControlToField := TLinkControlToField(BindingsList1.BindComps[I]);
          Memo1.Lines.Add(ALinkControlToField.Name);
          for J := 0 to ALinkControlToField.Binding.FormatExpressions.Count-1 do
          begin
            Memo1.Lines.Add('--> Format:  ' 
           + ALinkControlToField.Binding.FormatExpressions[J].SourceExpression + ' - '
           + ALinkControlToField.Binding.FormatExpressions[J].ControlExpression);
          end;
          for J := 0 to ALinkControlToField.Binding.ParseExpressions.Count-1 do
          begin
            Memo1.Lines.Add('--> Parse :  ' 
          + ALinkControlToField.Binding.ParseExpressions[J].SourceExpression + ' - '
          + ALinkControlToField.Binding.ParseExpressions[J].ControlExpression);
          end;
          for J := 0 to ALinkControlToField.Binding.ClearExpressions.Count-1 do
          begin
            Memo1.Lines.Add('--> Clear :  ' 
            + ALinkControlToField.Binding.ClearExpressions[J].SourceExpression + ' - '
            + ALinkControlToField.Binding.ClearExpressions[J].ControlExpression);
          end;
        end;
      end;
    end;
     
     
    end.

Discussions similaires

  1. Comment créer dynamiquement des colonnes à un datagrid par binding
    Par zoaax dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 05/01/2011, 13h54
  2. Réponses: 3
    Dernier message: 08/05/2009, 09h39
  3. MFC : comment créer dynamiquement des boutons?
    Par olator dans le forum Mobiles
    Réponses: 0
    Dernier message: 23/10/2008, 19h05
  4. [Hibernate] Comment créer dynamiquement un fetching plan
    Par mauvais_karma dans le forum Hibernate
    Réponses: 15
    Dernier message: 08/08/2005, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo