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 :

Comment rendre invisible une colonne de datagrid si le fichier xml de données


Sujet :

Flex

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 53
    Points : 46
    Points
    46
    Par défaut Comment rendre invisible une colonne de datagrid si le fichier xml de données
    Bonjour,

    Ce que je voudrais faire c'est afficher les données contenues dans un fichier xml à l'aide d'un datagrid. Jusqu'ici rien de bien compliqué, mais ce que je voudrais faire plus précisément c'est rendre une colonne de ce dataGrid invisible lorsque le fichier xml ne contient pas de données pour celle ci.
    En effet, mon fichier xml contient des données pour 2 ou 3 colonnes suivant les cas.
    J'ai fais différent essais mais rien de satisfaisant, lorsque je test mon application en dehors d'un navigateur web j'ai un problème de type
    Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    tu n'aurais pas un petit bout de code pour éclaircir ta problématique?

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    voila mon datagrid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <mx:ComboBox id="cboBox" dataProvider="{feedRequest1.lastResult.param}" labelField="paramname"  />
    <mx:DataGrid id="dg1" dataProvider="{cboBox.selectedItem.data.HEURE}" creationComplete="init();" >
       <mx:columns>
            <mx:Array id="tab1">
            <mx:DataGridColumn dataField="@name" headerText="Heures" /> 
            <mx:DataGridColumn  dataField="DONNEES" headerText="Force" />
            <mx:DataGridColumn id="C3" dataField="DIRECTION" headerText="Direction" />
            </mx:Array>
       </mx:columns>
    </mx:DataGrid>
    et voila exemple de fichier xml :
    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
    <list>
    <param>
    <paramname>Param1</paramname>
    <data>
    <HEURE name="01:00" > 
    <DONNEES>1.48</DONNEES>
    <DIRECTION>O</DIRECTION>
    </HEURE>
    .
    .
    .
    </data>
    </param>
    <param>
    <paramname>param2</paramname>
    <data>
    <HEURE name="01:00" > 
    <DONNEES>0.19</DONNEES>
    </HEURE>
    .
    .
    .
    </data>
    </param>
    </list>
    Dans ce fichier on peut observer 2 paramètres avec chacun des données sur 24H, un avec 1 seule donnée <DONNEES> par heure et l'autre avec 2 <DONNEES> + <DIRECTION>.
    Suivant le paramètre sélectionné j'ai deux ou trois valeurs à afficher pour une heure donnée et je voudrais lorsque je n'ai que 2 champs à afficher, n'afficher que les 2 colonnes correspondantes. Ici c'est la colonne C3 que je voudrais rendre invisible si la balise "DIRECTION" n'existe pas pour le paramètre sélectionné.

  4. #4
    Membre expérimenté

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Tu pourrais peut être utilisé la propriété visible du DataGridColumn. Etant donne que ton data provider ne contient qu'un objet tu peux faire un test du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mx:DataGridColumn id="C3" dataField="DIRECTION" headerText="Direction" visible="{cboBox.selectedItem.data.HEURE.DIRECTION!=null}"/>
    Je n'ai pas testé et il y a peut être de meilleures solutions. Mais ça pourrait peut être te faire avancer déjà.
    ++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    merci ellene pour ta réponse, j'ai déjà essayé l'équivalent mais en as3 et ça ne marche pas, le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(cboBox.selectedItem.data.HEURE.DIRECTION == null)
    ne donne rien.
    J'ai trouvé un subterfuge en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((cboBox.selectedItem.data.HEURE.DIRECTION).toString()=="")
    le problème c'est que ça fonctionne mais ça lève une erreur à chaque exécution lorsque la balise direction n'existe pas "référence à un objet null"
    Je ne sais pas si il existe quelque chose du style if...exist
    je cherche mais pour le moment ne trouve pas

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    Je viens de tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(cboBox.selectedItem.data.HEURE.DIRECTION == undefined)
    ça fais ce que je veux sauf que ça lève encore et toujours cette erreur de référence à un objet null lorsque j'exécute mon appli directement dans le flash player et pas dans mon navigateur.

  7. #7
    Membre expérimenté

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Et si tu testais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(cboBox.selectedItem.data.HEURE.DIRECTION.length() == 0)
    Mais je ne comprend pas pourquoi il dirait que l'objet est à null dans Flash Player. Il t'affiche quand même le contenu de ton XML?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    En simplifiant mon code je me suis rendu compte que ce n'est pas à ce niveau là que ça coince.
    Je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     if(cboBox.selectedItem.data.HEURE.DIRECTION.length() == 0)
    {
    	colonne3.visible = false;
    }
    else
    {
    	colonne3.visible = true;
    }
    En réalité j'utilise un viewstack qui me permet d'afficher les données sous forme de graphique ou sous forme de tableau.
    Le problème est que j'appel cette fonction lorsque que je change de "vue" (passe de la vue en graphique à la vue en tableau) et que la colonne 3 n'existe pas encore.

    Est ce quelqu'un aurait une piste pour ce nouveau problème ?

  9. #9
    Membre expérimenté

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Points : 1 710
    Points
    1 710
    Par défaut
    Je pense que pour la fonction de modification de la vue tu devrais mettre un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if(dataGridvue.cboBox != null)
    {
              if(cboBox.selectedItem.data.HEURE.DIRECTION.length() == 0)
              {
    	       colonne3.visible = false;
               }
               else
               {
     	       colonne3.visible = true;
               }
    }
    Et sur le creationComplete de ta vue, tu crées une autre fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private function onCreationComplete():void
    {
              if(cboBox.selectedItem.data.HEURE.DIRECTION.length() == 0)
              {
    	       colonne3.visible = false;
               }
               else
               {
     	       colonne3.visible = true;
               }
    }
    Ainsi la première fois il passe creationComplete et les autres fois il passe par la fonction appelée lors du changement de vue (puisque tes composants existeront par la suite).

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    J'ai simplement utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(colonne3 != null){
              if(cboBox.selectedItem.data.HEURE.DIRECTION.length() == 0)
              {
    	       colonne3.visible = false;
               }
               else
               {
     	       colonne3.visible = true;
               }
    }
    dans mon code et visiblement ça suffit.
    A force de chercher dans la mauvaise direction
    merci ellene

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

Discussions similaires

  1. Réponses: 29
    Dernier message: 06/08/2008, 20h31
  2. Comment rendre invisible une colonne de datagridview
    Par frederix quest dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/05/2007, 18h12
  3. [c#] comment rendre invisble une colonne d'un datagrid
    Par meteor4 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/07/2005, 16h26
  4. Réponses: 10
    Dernier message: 19/05/2004, 15h44
  5. comment rendre invisible une FormStyle->fsMDIchild
    Par caluloa dans le forum C++Builder
    Réponses: 5
    Dernier message: 16/05/2003, 14h21

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