Demande d'aide sur un Datagrid avec fichier XML externe

twinsen60 Messages postés 69 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 21 janvier 2012 - 6 avril 2011 à 19:43
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 6 avril 2011 à 23:15
BOnjour,

Voilà, je me sers d'un code venant du site Philflash...avec un Datagrid.
Exemple PhilFlash

Celà fonctionne très bien, sauf que lorsque de créer et/ou modifie mon fichier XML, je dois l'écrire dans l'ordre.

J'aimerai pouvoir écrire mon XML dans le désordre, et l'application Flash, m'affiche ma liste, dans l'ordre, alphabétique sur la colonne "NOM"...

Comment faire ?
Car pour le moment, pour trié, je dois cliquer sur le titre de la colonne 2x...

Merci d'avance

Voici le code AS :

import mx.utils.Delegate;
import mx.controls.gridclasses.DataGridColumn;
// -----  DataGrid -----
// Create columns for datagrid
film_dg.columnNames = ["nom", "genre", "son", "type"];
//Customization des colonnes
var col:mx.controls.gridclasses.DataGridColumn;
var totalWidth:Number = 0;
//
col = film_dg.getColumnAt(0);
col.width = 250;
col.headerText = "Nom :";
totalWidth += col.width;
//
col = film_dg.getColumnAt(1);
col.width = 150;
col.headerText = "Genre : ";
col.textAlign="center";
totalWidth += col.width;
//
col = film_dg.getColumnAt(2);
col.width = 80;
col.headerText = "Son : ";
col.textAlign="center";
totalWidth += col.width;
//
col = film_dg.getColumnAt(3);
// 18: largeur scrollbar
col.width = film_dg.width-(totalWidth+18);
col.textAlign="center";
col.headerText = "Type :";
//
film_dg.setStyle("alternatingRowColors", Array(0xFFFFFF, 0xF7F7F7));
//
// -----  Creation dynamic ComboBox -----
//
film_ds.addEventListener("afterLoaded", Delegate.create(this, doCreateDataComboBox));
function doCreateDataComboBox():Void {
var dataProvider:Array = film_ds.items;
var len:Number = dataProvider.length;
var resultDP:Array = [];
for (var i:Number = 0; i<len; i++) {
var currentValue:String = dataProvider[i].genre;
var found:Boolean = false;
var maxDP:Number = resultDP.length;
for (var j:Number = 0; j<maxDP; j++) {
if (resultDP[j].label == currentValue) {
found = true;
break;
}
}
// Ajout de la new value
if (!found) {
var newObject:Object = {label:currentValue};
resultDP.push(newObject);
}
}
// Tri du résultat DataProvider
resultDP.sortOn("label");
// Ajout premier item
resultDP.unshift({label:"-- Sélectionnez un genre --"});
// set the dataProvider for comboBox
filter_cb.dataProvider = resultDP;
}
//
// -----  filtre pour ComboBox -----
//
filter_cb.addEventListener("change", Delegate.create(this, doChangeFilter));
function doChangeFilter(eventObj:Object):Void {
var selectedIndex:Number = filter_cb.selectedIndex;
var selectedItem:Object = filter_cb.selectedItem;
var filterValue:String = selectedItem.label;
if (selectedIndex == 0) {
// no filtre
film_ds.filtered = false;
} else {
film_ds.filtered = true;
film_ds.filterFunc = function(item:Object) {
return (item.genre == filterValue);
};
}
}

// -----  Creation dynamic ComboBox2 -----
//
film_ds.addEventListener("afterLoaded", Delegate.create(this, doCreateDataComboBox2));
function doCreateDataComboBox2():Void {
var dataProvider:Array = film_ds.items;
var len:Number = dataProvider.length;
var resultDP:Array = [];
for (var i:Number = 0; i<len; i++) {
var currentValue:String = dataProvider[i].type;
var found:Boolean = false;
var maxDP:Number = resultDP.length;
for (var j:Number = 0; j<maxDP; j++) {
if (resultDP[j].label == currentValue) {
found = true;
break;
}
}
// Ajout de la new value
if (!found) {
var newObject:Object = {label:currentValue};
resultDP.push(newObject);
}
}
// Tri du résultat DataProvider
resultDP.sortOn("label");
// Add the first item
resultDP.unshift({label:"-- Sélectionnez un type --"});
// set the dataProvider for comboBox
filter_cb2.dataProvider = resultDP;
}
//
// -----  filtre pour ComboBox2 -----
//
filter_cb2.addEventListener("change", Delegate.create(this, doChangeFilter2));
function doChangeFilter2(eventObj:Object):Void {
var selectedIndex:Number = filter_cb2.selectedIndex;
var selectedItem:Object = filter_cb2.selectedItem;
var filterValue:String = selectedItem.label;
if (selectedIndex == 0) {
// no filter
film_ds.filtered = false;
} else {
film_ds.filtered = true;
film_ds.filterFunc = function(item:Object) {
return (item.type == filterValue);
};
}
}

//
// -----  Decode résultat XMLConnector  -----
//
film_con.addEventListener("result", Delegate.create(this, doParseData));
//
function doParseData():Void {
var dataXML:XML = film_con.results;
var resultArray:Array = [];
var mainNode:XMLNode = dataXML.firstChild;
var aNode:XMLNode = mainNode.firstChild;
while (aNode) {
var obj:Object = new Object();
for (var attribute in aNode.attributes) {
obj[attribute] = aNode.attributes[attribute];
}
resultArray.push(obj);
aNode = aNode.nextSibling;
}
// -- utilisation items (et non dataProvider)
film_ds.items = resultArray;
}
// -----  Start application -----
film_con.trigger();

3 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
6 avril 2011 à 21:44
Bonjour, tu coderais en as3, tu pourrais el faire directement.
Après il te reste la possibilité de mettre chaque noeud dans un tableau et de le trier..

Peg'
0
twinsen60 Messages postés 69 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 21 janvier 2012
6 avril 2011 à 22:42
Merci pour cette réponse rapide....
Mais j'y connais pas grand chose, cela donnerai quoi en AS3 si c'est pas trop demandé.

Merci d'avance.
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
6 avril 2011 à 23:15
Un truc complètement différent et ça dépendrait complètement de la scructure de ton XML...

Va voir là : http://help.adobe.com/fr_FR/FlashPlatform/reference/actionscript/3/XML.html (en bas de la page)

Peg'
0
Rejoignez-nous