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

Flex Discussion :

HttpService + DataGrid + Checkbox


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Par défaut HttpService + DataGrid + Checkbox
    Voilà je galère depuis un petit moment avec l'ajout d'une checkbox représentant une ligne sélectionnée dans un datagrid.

    Mon datagrid est chargé par l'intermédiaire d'une requête SQL.
    et si je veux mémoriser l'état de ma checkbox il faut que mon XML stocke aussi la donnée selected

    donc côté php je renvoie aussi selected :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xml .= "<selected>true</selected>";
    Je suis parti de cet exemple : http://www.flex-tutorial.fr/2009/08/...c-des-checkbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <mx:DataGrid width="267" height="276" dataProvider="{userRequest.lastResult.test}" id="Grid" change="tst_select()">		
    <mx:columns>
      <mx:DataGridColumn width="20">
        <mx:itemRenderer>
          <mx:Component>
    	<mx:CheckBox label="" selected="{data.selected}" click="{data.selected=!data.selected}"/>
          </mx:Component>
        </mx:itemRenderer>
       </mx:DataGridColumn>			
    </mx:DataGrid>
    <mx:HTTPService id="userRequest" url="php/tests.php?action=list2" useProxy="false" method="POST" resultFormat="e4x">
    </mx:HTTPService>
    La checkbox apparaît cochée au départ, elle se décoche, mais ensuite impossible de la recocher.

    Une idée ??

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Bonjour,

    Le tutoriel dit :
    En même temps que le basculement de la valeur de data.selected, on informe aussi notre application qu'un changement a été effectué. Pour cela, il faut passer par outerDocument car on se trouve dans un itemRenderer qui a son propre scope:
    Il faudrait donc que tu informes ta datagrid qu'il y a eu une modification dans ton item renderer. Je n'ai jamais essayé de cette façon mais sinon tu as les items editors pour l'édition de tes items. Enfin là tout dépend de tes besoins.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Par défaut
    En cherchant du côté des ItemRender et en tatonant dans tous les sens, j'ai enfin trouvé la solution.

    Le principal problème est un problème de conversion, ma requête me renvoie true ou false en chaîne donc {data.selected=!data.selected} ne marche jamais !

    On peut penser qu'il suffit donc de convertir cette valeur avec la fonction Boolean .... mais non !
    car Boolean ne marche pas terrible avec les chaines :
    Boolean( "true" ) == true
    Boolean( "false" ) == true

    Donc il faut gérer ça à la mano :

    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
    <mx:itemRenderer>			
      <mx:Component>				
        <mx:CheckBox
          selected="{data.selected=='true'}" change="onChange(event);">
          <mx:Script>
            <![CDATA[                            
              private function onChange(evt:Event):void 
              {
                 if ( data.selected == "true" )
                 {
                   data.selected = false;
                 }
                 else
                 {
                   data.selected = true;
                }
             }
          ]]>
         </mx:Script>
      </mx:CheckBox>
      </mx:Component>
    </mx:itemRenderer>
    Solution super simple... j'ai un peu l'impression de réinventer la roue... et je ne sais si c'est la façon la plus élégante gérer les checkbox sous FLEX, mais pour l'instant c'est la seule que j'ai trouvé.

    Est-ce qu'il serait possible mettre ce code dans un composant, et quelle est la syntaxe ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    Effectivement rien ne permet de dire que la propriété selected est un booléen.

    Pour la fonction globale Boolean(string) elle est bien documentée comme : renvoie true si string est non vide et renvoie false autrement. Je ne trouve pas cela spécialement choquant.

    Est-ce que cette syntaxe ne fonctionne pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:CheckBox selected="{data.selected=='true'}" change="data.selected=data.selected=='true'?'false':'true';">
    Le problème ne vient pas de la gestion des CheckBox mais du type string de la propriété selected.
    J'ai l'habitude d'utiliser plutôt 0 et 1 pour traduire les valeurs booléennes provenant d'une base de donnée, d'autant que le type boolean n'est pas un type sql présent dans tous les SGBD. La gestion est un peu plus simple qu'avec 'true' et 'false' car Boolean(0) = false et Boolean(1) = true

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 65
    Par défaut
    Oui effectivement , j'arrive au même code avec une légère variation, mais c'est kif kif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selected="{data.selected=='true'}"  change="{data.selected = ( data.selected == 'false' )}">
    Par contre si tu travaille avec des entiers, le retour du php c'est du string,
    tu n'auras pas Boolean(0) = false et Boolean(1) = true
    mais Boolean('0') = true et Boolean('1') = true donc ça ne marche pas non plus.

    ou alors il faut faire un truc du style Boolean(Number(selected)) ... c'est un peu lourd.

    Lier une checkbox avec un HTTPResult est loin d'être intuitif.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data.selected = ( data.selected == 'false' )
    +1 bravo pour la concision du code Peut-être un peu moins intuitif à la lecture... Je retiens la leçon.

    Pour 0/1 à la place de false/true effectivement ça ne change pas grand chose dans ton cas, à part éliminer les peu probables hétérogénéités de casse (false, False, FALSE).

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

Discussions similaires

  1. [Binding] DataGrid Checkbox
    Par aurelien.tournier dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 24/02/2011, 10h58
  2. Httpservice via checkbox dynamique
    Par MrVentouse dans le forum Flex
    Réponses: 3
    Dernier message: 08/04/2010, 15h28
  3. datagrid+checkbox vb.net 2003
    Par bendsiham dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/12/2009, 22h32
  4. [VB.NET] datagrid, checkbox et tabstyle
    Par HULK dans le forum Windows Forms
    Réponses: 7
    Dernier message: 24/10/2005, 10h06
  5. [VB.NET] Datagrid + CheckBox : Cocher toutes les cases
    Par sirex007 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 24/05/2004, 15h33

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