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 :

AdvancedDataGrid avec Array capricieu


Sujet :

Flex

  1. #1
    Membre chevronné Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Par défaut AdvancedDataGrid avec Array capricieu
    Bonjour le forum,

    Je vous soumet ici un problème ..

    J'utilise dans mon appli java/flex une structure de type AdvancedDataGrid alimenté par un ArrayCollection et dont les colonnes sont gérés par un Array :
    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
    ..
    [Bindable]
    public  var collection:ArrayCollection = new ArrayCollection;
    ...
     
     
    var adv:AdvancedDataGrid = new AdvancedDataGrid
    var colArray:Array = new Array;
    var column:AdvancedDataGridColumn = new AdvancedDataGridColumn();
    column.headerText = "colonne A";
    column.dataField = colA;
    colArray.push(column);
    adv.columns = colArray;
    adv.dataProvider = collection;
    //ajout au panel
    monPanel.addChild(adv);
    Jusque là tout va bien..

    Le problème c'est lorsque je change les données de mon dataProvider plus loin dans le code..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    collection = new ArrayCollection
    .....  collection est maintenant alimenté avec colB
    ........
     
    var colArray:Array = new Array;
    var column:AdvancedDataGridColumn = new AdvancedDataGridColumn();
    column.headerText = "colonne B";
    column.dataField = colB;
    colArray.push(column);
    adv.columns = colArray;
    adv.dataProvider = collection;
    et bien là les données ont disparues et l'ancienne colonne est conservé (colA)..


    J'espère avoir bien expliqué mon soucis..

    Merci d'avance pour le moindre embryon de début d'indice..

  2. #2
    Membre expérimenté Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Par défaut
    Bonjour, a mon avis ton probleme vien de la variable colArray

    je l'aurai mise comme variable de classe et non pas local si j'ai bien compris ton code, j'ai l'impression que tu l'initialise à chaque fois donc c normale que tu perde tes infos

    Bon courage

    Samy

  3. #3
    Membre chevronné Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Par défaut
    Merci Samy tes réponses sont toujours de bons conseils ..

    En fait ce que je voudrais c'est que les données colB remplace celles de colA, mais je me retrouve avec juste l'entete de colA alors que j'attend colB avec ses données..

    J'ai mis mon colArray en variable de classe mais c'est pas mieux..

  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
    1-Non il ne sert à rien d'étendre la portée de colArray. Puisqu'il est référencé par adv.columns il ne sera pas détruit par le GC.

    2-Je trouve bizarre de récréer une colonne pour remplacer celle qui existe. Pourquoi ne pas simplement modifier le titre et le dataField de la colonne existante ?

  5. #5
    Membre chevronné Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Par défaut
    bjr Jylaxx,

    Le principe est de réaffecter un nouveau tableau de colonnes pour réinitialiser le contenu du tableau, mais il semble conserver les valeurs précédantes. Peut on forcer le gc à supprimer ces références?

    Quelle est la portée de "Bindable" pour les variables ?

  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
    La doc dit :
    If you want to change the set of columns, you must get this Array, make modifications to the columns and order of columns in the Array, and then assign the new Array to the columns property. This is because the AdvancedDataGrid control returns a copy of the Array of columns, not a reference, and therefore cannot detect changes to the copy.
    Je pense que ceci peut peut-être expliquer ce que tu observes (bien que je m'expliques pas trop le cas où tu réaffectes de nouvelles colonnes...)

    Quelle est la portée de "Bindable" pour les variables ?
    Je ne suis pas certain de comprendre la question. La notion de portée est indépendante.

  7. #7
    Membre chevronné Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Par défaut
    je teste le nombre de colonnes de mon advanceddatagrid la valeur retournée est 1 "colB", mais visuellement le composant comporte 2 colonnes..

  8. #8
    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
    si tu mets columns=null il se passe quoi ?

  9. #9
    Membre chevronné Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Par défaut
    adv.columns = null;

    provoque, lors de l'initialisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.

  10. #10
    Membre chevronné Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Par défaut
    Quelques explications sur mon application..

    J'ai un composant Tree, lors d'un click sur un item de l'arbre j'initialise mon advDataGrid comme un panier. (ca fonctionne),

    Par la suite tout drag and drop d'un élement de l'arbre, enrichit le panier (ca fonctionne),

    Jusqu'à ce que, effectuant un click sur un élément de l'arbre qui est sensé réinitialiser le panier.. la nouvelle sélection apparait mais les colonnes précédantes sont conservées..

    J'espère avoir été clair dans mes explications..

  11. #11
    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
    Par rapport à la doc cité ci-dessus, est-ce que tu as essayé ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var colArray:Array = adv.columns;
    colArray.length = 0;
    var column:AdvancedDataGridColumn = new AdvancedDataGridColumn();
    column.headerText = "colonne B";
    column.dataField = colB;
    colArray.push(column);
    adv.columns = colArray;
    adv.dataProvider = collection;

  12. #12
    Membre chevronné Avatar de supernova
    Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2005
    Messages : 447
    Par défaut
    En fait j'ai deux fonctions :

    itemClick qui réagit au click sur un élément de l'arbre pour initaliser le contenu de l'advancedDatagrid (panier),

    dragDropHandler qui réagit au glisser déplacer d'un élément pour "alimenter" le panier,

    Si j'applique ta suggestion itemClick plante à l'initialisation du panier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.

  13. #13
    Membre expérimenté Avatar de samy2525
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 259
    Par défaut
    Re; en lisant un peu les postes, je pense que la réference de l'objet AdvencedDataG qui te joue des tours

    pkoi ne pas mettre une fonction initDG de sort que à chaque fois que tu fais une action sur le DG tu l'appelle et elle te crée un nouveau DG

    en gros

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private function initADG():void
    {
       monADG = new AdvencedDataGrid ();
    }
    aprés j'avoue ça sera un peu teutché (compliqué ) pour le maintenir mais peu etre c une piste à creser

    Bon courage

  14. #14
    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
    Je ne vois pourquoi adv serait null sur la ligne qui lit la propriété columns et ne serait plus null qq lignes plus loin alors que cette variable n'est pas modifiée !!

    Dans tous les cas il faudrait plutôt que de nous transmettre le message 1009 nous indiquer sur quelle ligne cela survient et quelle variable est concernée..

    A la relecture les bouts de code transmis ne permettent pas d'avoir une idée suffisamment précise pour éliminer un tas de sources d'erreur.

Discussions similaires

  1. [MySQL] Problème avec array
    Par Dantahoua dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/03/2007, 23h53
  2. [VB-Excel]problème de syntaxe avec Array
    Par DomBourti dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/07/2006, 22h30
  3. Probleme de type avec Array
    Par BECHE dans le forum Langage
    Réponses: 5
    Dernier message: 31/03/2006, 00h05
  4. Petit probleme avec Arrays.Sort(...)
    Par Seth77 dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 15/01/2006, 13h48
  5. création de tableaux avec Array() et élément 'fantome'
    Par Talieth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2005, 10h49

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