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 :

Récupérer les tris sur les colonnes d'un DataGrid


Sujet :

Flex

  1. #1
    Membre habitué Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Points : 162
    Points
    162
    Par défaut Récupérer les tris sur les colonnes d'un DataGrid
    Bonjour à tous,

    Dans mon application, j'ai une DataGrid remplie. L'utilisateur peut profiter de ce qui se fait de mieux dans le genre :

    En sélectionnant un objet en cliquant dessus,
    En déplaçant la ScrollBar pour voir les objets cachés,
    Ou en triant les données en cliquant sur les intitulés de colonnes.

    Le problème c'est qu'à divers moments (contrôlés), cette liste est rechargée. Autrement dit, le DataProvider est actualisé.
    A cause de cela, la ScrollBar, l'item sélectionné et les tris sont réinitialisés.

    On sent venir ma question : Comment garder ou restituer la configuration d'avant l'actualisation ?

    Dans le code suivant j'ai déjà résolu le problème de l'objet sélectionné et de la ScrollBar. Il me reste à restituer le tri sur les colonnes.

    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:Script>
    	<![CDATA[
    		public function actualiser():void
    		{
    			listeGroupes.dataprovider = arrayGroupes;
    			listeGroupes.selectedIndex = indexEditeur;
    			listeGroupes.verticalScrollPosition = indexScroll;
    		}
    	]]>
    </mx:Script>
     
    <mx:DataGrid id="listeGroupes"
            change="indexEditeur=listeGroupes.selectedIndex"
            scroll="indexScroll=event.position" >
    	<mx:columns>
    		<mx:DataGridColumn dataField="0" headerText="Editeurs"
    			itemRenderer="{new ClassFactory(LabelPerso)}" />
    		<mx:DataGridColumn dataField="1" headerText="Groupes" />
    		<mx:DataGridColumn dataField="2" visible="false" />
    	</mx:columns>
    </mx:DataGrid>
    Il ne me reste plus qu'à trouver comment récupérer les éventuels tri sur les colonnes et pour ça j'ai besoin de votre aide

    Merci d'avance et bonne journée

  2. #2
    Membre éclairé
    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
    Points : 894
    Points
    894
    Par défaut
    Dans le code suivant j'ai déjà résolu le problème de l'objet sélectionné et de la ScrollBar
    La solution est très partielle. En effet il si l'item sélectionné n'existe plus ou n'apparait pas dans le même ordre, tu vas re-sélectionner un item différent de l'item initial...

  3. #3
    Membre habitué Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Points : 162
    Points
    162
    Par défaut
    C'est vrai sauf que dans l'application, il est impossible de supprimer un objet.
    Et pour la question de l'index, un simple selectedItem peut régler la question
    Mais please ne nous écartons pas du sujet principal du post : récupérer les tris sur les colonnes

  4. #4
    Membre éclairé
    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
    Points : 894
    Points
    894
    Par défaut
    un simple selectedItem peut régler la question
    Dans la mesure où tu modifies la source de données, les objets créés dans Flex sont différents. Sauf tu fournis un UID dans les propriétés de tes objets qui sera invariant entre deux actualisation, je crains que Flex ne soit pas capable de retrouver ton item dans la mesure où il va recréer des UID différents...

    C'est quand même l'un des objectifs il me semble

    (au moins c'est utile pour les lecteurs qui auraient le même genre de demande, de savoir que la solution est plus complexe...)

  5. #5
    Membre habitué Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Points : 162
    Points
    162
    Par défaut
    J'ai une partie de réponse à apporter l'évènement headerRelease de la DataGrid me permet de capturer un clic souris sur un header de colonne.
    Ce qui me permet de stoker l'index de ladite colonne comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <mx:DataGrid id="listeGroupes"
            headerRelease="indexColonne=event.columnIndex" 
            change="indexEditeur=listeGroupes.selectedIndex"
            scroll="indexScroll=event.position" >
    	<mx:columns>
    		<mx:DataGridColumn dataField="0" headerText="Editeurs"
    			itemRenderer="{new ClassFactory(LabelPerso)}" />
    		<mx:DataGridColumn dataField="1" headerText="Groupes" />
    		<mx:DataGridColumn dataField="2" visible="false" />
    	</mx:columns>
    </mx:DataGrid>
    Et pour récupérer la direction du tri pour l'instant je n'ai rien de mieux que ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var triInverse:Boolean = listeGroupes.columns[indexColonne].sortDescending
    //qui renvoie true si le tri est inversé
    Maintenant il me reste encore à imposer un tri à ma colonne après actualisation.
    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listeGroupes.columns[indexColonne].sortDescending = triInverse;
    Mais comme le dit la doc, cette fonction ne peut pas être utilisée pour lancer un tri.
    Malheureusement elle ne mentionne pas comme le faire
    Quelqu'un aurait-il une idée ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/04/2012, 11h43
  2. [XL-2007] Question sur les tris est les sous-totaux
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/11/2011, 19h23

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