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

Composants FMX Delphi Discussion :

LiveBindings : lier une propriété visible si Faux


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 664
    Billets dans le blog
    65
    Par défaut LiveBindings : lier une propriété visible si Faux
    Bonjour,

    je me penche sur les livebindings et bute sur un problème :

    par exemple : soit une case à cocher et un label , je voudrais que le label ne soit visible que si la case n'est pas cochée
    ou même problématique
    je voudrais qu'un label soit visible si dans ma base de données ma valeur booléenne est false

    autant c'est facile dans le sens VRAI - VRAI autant dans le sens VRAI - FAUX je nage , déjà que je n'aime pas trop l'éditeur de liens , là je pète un câble !

  2. #2
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 544
    Billets dans le blog
    10
    Par défaut sur XE3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.LinkControlToProperty2AssigningValue(Sender: TObject;
      AssignValueRec: TBindingAssignValueRec; var Value: TValue;
      var Handled: Boolean);
    begin
      if not value.AsBoolean then
        value := 'True'
      else
        value := 'False'
    end;

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 664
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    je ne connaissait pas cet event, il m'ouvre certainement des possibilités ....
    effectivement sur une simple case à cocher lié à un label ça fonctionne
    mais hélas en XE8 j'obtiens une exception de classe EInvalidCast (transtypage incorrect) , sur une valeur booléenne dans une DB
    [Edit]
    pour la liaison avec le champ boolean j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      value:=(not fdQuery1ZONE_EURO.Value).ToString;
    resterait à changer le fdQuery1ZONE_EURO.Value par "la valeur du champ lié" ce qui serait encore plus Beau

  4. #4
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 544
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    ...
    resterait à changer le fdQuery1ZONE_EURO.Value par "la valeur du champ lié" ce qui serait encore plus Beau
    Peut être essayer quelque chose dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if value.AsString = 'False' then  value := 'True'  else  value := 'False'

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 664
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    effectivement ton dernier code fonctionne, mais que de complications !
    Toutes les démos (FMX) que j'ai vues jusqu'à présent ne font que des livebindings que je qualifierais de simples : un ensemble de données (biolife la plupart du temps) des edits, un navigateur et une Grille mais dès qu'il s'agit d'aller plus loin , rien de concret !

    par exemple :
    pour en revenir à un checkbox lié à une base de données soit un champ booléen (indiqué en BDD par les valeurs Y,N) , si cela fonctionne correctement coté liaison donnée vers composant la mise à jour composant vers données tente de mettre un F pour False et non N !! (en bref il manque ce qui en VCL était la liste Values)
    Faire simplement les choses avec Firemonkey est-il devenu si ardu ? , je pense plutôt à une lacune de (in)formation

    soit une donnée d'une table avec quelques choix possible (H,B,G,D respectivement HAUT,BAS,GAUCHE,DROITE)
    - Comment gérer correctement ce Combobox
    soit une table avec quelques liens sur une autre table via clé étrangère
    - comment faire ce qui en VCL est un DBLookupCombobox
    Tous les tutoriels et vidéos vus jusqu'à présent n'aborde pas ces sujets . << si vous avez des liens je suis preneur


    pour en revenir à ma frustration, je trouve que les livebindings sont ergonomiquement difficile à gérer visuellement (impossible de garder mon dessin réorganisé à la "mord moi le nœud" dit-on par chez moi, difficile de visualiser l'ensemble) et je me demande ce qu'il en sera pour de la maintenance

    de plus je trouve par-ci par là des critiques (non flatteuses) tendant à dire que les livebindings baissent les performances , qu'en est-il réellement ?
    en tout cas pour ce qui est de ma "productivité" c'est actuellement le cas : je suis de plus en plus

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 664
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Citation Envoyé par SergioMaster Voir le message
    pour en revenir à un checkbox lié à une base de données soit un champ booléen (indiqué en BDD par les valeurs Y,N) , si cela fonctionne correctement coté liaison donnée vers composant la mise à jour composant vers données tente de mettre un F pour False et non N !! (en bref il manque ce qui en VCL était la liste Values)
    pour ceci, il s'agit plus d'un problème Firedac/Firebird que de livebindings à proprement parler, en effet Firebird n'a pas de champs booléen (enfin pour l'instant car la version 3 va l'implémenter) bien qu'il y ait une astuce simple pour l'implémenter : faire un domaine (contenant BOOL dans le nom). Ceci étant mis en place Firedac propose alors de traiter ce domaine comme un boolean et donc d'avoir un champ Boolean. Le problème vient ensuite de Firedac, qui bien que permettant de gérer les valeurs d'affichage (displayvalues) ne traite pas le retour de la même manière. Par exemple

    avec displayvalues='O;N' les valeurs retournées par la liaison resteront True;False ou 0,1 (sauf peut être à produire du code supplémentaire)

    mon conseil dans cette "configuration" (Firebird/Firedac) créer un domaine sur un smallint
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE DOMAIN BOOLEAN AS SMALLINT 
     CHECK(VALUE IS NULL OR VALUE IN (0,1))

    Je pense que le reste de mes cogitations sur les Combobox et les Livebindings iront sur mon blog jusqu'à un futur Tutoriel ou FAQ, voire composant, si j'arrive à maîtriser tout ce fatras

  7. #7
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 544
    Billets dans le blog
    10
    Par défaut De l'eau au moulin
    Pour moi LiveBinding est une technique jeune qui doit aller vers une plus grande maturité.

    Je mettrai prochainement en ligne un exemple d'une vraie relation maitre/détail utilisant LiveBinding entre deux tables que j'ai réalisé en cours Delphi hier avec les stagiaires.

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 664
    Billets dans le blog
    65
    Par défaut
    J'ai hâte de lire ça !

    je m'approche d'un équivalent DBlookupCombobox grâce à cet article
    mais j'ai encore quelques soucis (sans parler du fait que ce soit plus qu'énervant à mettre en place)
    - il faut passer en mode Edit comme indiquer en fin de l'article (étrange car dans mon programme de test je suis déjà en mode Edit)
    - pour l'instant la valeur ne passe pas

    j'enquête sur d'autres pistes, en tout cas c'est un frein certain. Comme par hasard aucune démo de ce genre dans les exemples (datant pour la plupart de XE2) à croire que les clés étrangères dans les bases de données !

  9. #9
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 544
    Billets dans le blog
    10
    Par défaut Un élément de réponse
    Citation Envoyé par SergioMaster Voir le message
    J'ai hâte de lire ça !...
    Ci joint le code sous XE7 à perfectionner. La base de données (SQL Lite) est celle des exemples Delphi de l'époque que j'utilise dans les formations que je donne pour FMX. Note : Utiliser soit la barre de navigation, soit entrer un numéro de facture dans le TEdit.

    Livebindingmd.zip

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 664
    Billets dans le blog
    65
    Par défaut
    Bonjour et merci
    Citation Envoyé par ALWEBER Voir le message
    Ci joint le code sous XE7 à perfectionner. La base de données (SQL Lite) est celle des exemples Delphi de l'époque que j'utilise dans les formations que je donne pour FMX. Note : Utiliser soit la barre de navigation, soit entrer un numéro de facture dans le TEdit.
    à perfectionner, effectivement (sans vouloir te vexer) et c'est sur ces problèmes là que je butte.
    Dans ton exercice :
    - sélectionner dans la liste modifie le TEdit mais ne change pas les données de la grille
    - saisir le TEdit semble mettre un dataset (maitre) en modification
    - la liaison Maitre/Détail ne s'appuie pas sur les Livebindings mais sur la liaison maitre détail du TFDTable
    Je planche sur les SideEffects pour gérer ces problèmes

    mon objectif étant pour l'instant uniquement Desktop
    - En ce qui concerne la liaison maitre/détail, je pense plutôt passer par des Querys paramétrées et lier les paramètresun simple datasource , les bons noms de paramètres+l'indication du mastersource font l'affaire pas besoin de liens
    - En ce qui concerne les combobox (les listview semblent plus abordables) me reste à lier une valeur à un libellé , je m'en approche Nom : dbComboboxlookup.PNG
Affichages : 317
Taille : 13,4 Ko
    en ne passant pas par le concepteur visuel, qui semble être le piège, mais par l'ajout manuel des liaisons
    (les trois "pointées" sur l'image ont été faites manuellement en jouant sur les propriétés d'un seul LinkFillControlField
    Datasource : BindSourceDB1
    FieldName : DEVISE_ID (Foreign Key sur table DEVISES)
    FillDataSource : BindSouceDB2
    FillDisplayFieldName : LIBELLE
    FillValueFieldName : ID_TECHNIQUE
    Cela fonctionne, mais uniquement lors de la première sélection d'un enregistrement
    d'une liste vers l'enregistrement
    Nom : image2.PNG
Affichages : 248
Taille : 14,7 Ko
    après retour vers la liste , le rappel de la même fiche
    Nom : image3.PNG
Affichages : 247
Taille : 4,6 Ko

    je persiste tel rocky je remonte sur le ring à chaque temps libre en croisant les doigts pour que je soit sur la bonne piste

  11. #11
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 544
    Billets dans le blog
    10
    Par défaut Sous XE3 sans DataSource
    Voilà un exemple plus compact en XE3 les AD composants sont à reprendre en FD COmposants pour les version plus récentes de Delphi

    Livebindingmd1.zip

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/08/2009, 10h59
  2. Rendre une propriété visible dans VS2005
    Par frochard dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/10/2007, 14h20
  3. Réponses: 5
    Dernier message: 26/09/2007, 03h34
  4. Réponses: 2
    Dernier message: 13/12/2006, 15h10
  5. Réponses: 2
    Dernier message: 13/12/2006, 11h37

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