Flash datagrid : Multiline headers

Le composant datagrid fait encore parler de lui. Bien pratique pour monter des interfaces d'administration et de data mining, il pose néanmoins pas mal de problèmes de formatage aux utilisateurs occasionnels.

=> Le grand classique des problèmes évoqués est de pouvoir afficher des conten us multi-lignes dans les cellules. Heureusement, vous avez déjà du localier la note technique qui y répond chez Adobe : http://www.adobe.com/support/documentation/en/flash/fl8/samples.html . le principe est d'utiliser l'API "CellRenderer", et cela fonctionne plutôt pas mal.

=> Mais la deuxième question corollaire est un peu plus ardue : Comment mettre en oeuvre des têtes de colonnes multi-lignes cette fois-ci ? Pas pareil ...

Nous avons été amenés, Lily et moi, à chercher une solution à l'occasion d'un projet de catalogue produits compilé sous Zinc. Cette solution, la voici :=> On verrouille le redimensionnement des colonnes du datagrid,=> Sur un calque situé au-dessus du datagrid, on dessine des têtes de colonnes sur mesure, avec aucune difficulté pour placer les titres sur plusieurs lignes.=> Dans ce clip, et sur chaque cellule de tête de colonne, on place un bouton transparent : Ils vont permettre de récupérer l'affichage du curseur doigt au survol, et de reprogrammer les comportements de tri de colonne.=> Pour trier les colonnes dynamiquement, il suffit d'agir sur le tableau qui sert de dataProvider au datagrid : Flash propose une méthode rès pratique, "Array.sortOn()". Imaginons ainsi que mon dataset comporte 3 champs comme suit :

ma_liste = [{nom:"quad", prenom:"damage", ville:"marseille"}, {nom:"lily", prenom:"virus", ville:"lyon"} ];

Si l'on souhaite trier suivant le nom, il suffit d'exécuter la commande

ma_liste.sortOn("nom");

Par défaut le tri est ascendant, et pour préciser l'ordre inverse, il suffit d'indiquer

ma_liste.sortOn("nom", Array.DESCENDING);

Simple, non ?

La dernière étape consiste alors à raffraichir explicitement l'affichage du datagrid en indiquant :

mon_datagrid.dataProvider=ma_liste;

La cerise sur le gâteau est ensuite d'ajouter les petites flèches visuelles indiquant le sens de tri, mais çà, vous savez faire ...

[swf src=http://web.infostrates.fr/infolabs/media/blogs/quad/datagrid_multiline_header.swf width=300 height=300 id=test version=7]

Les sources de l'exemple sont ici : datagrid_multiline_header.zip

Bookmark and Share

Commentaires

Authentifiez vous pour commenter.