itemRenderer et tri dans dataGrid
Bonjour,
je récupère d'une bdd un champ nommé "sens" et valant 0, 1 ou 2. Ce champ est mappé dans une dataGrid sans soucis. Maintenant, je souhaite changer l'itemRenderer (1 ou 2 -> une image, 0 -> un label valant "inconnu").
j'ai donc associé en as3 mon itemRenderer à un dataGridColumn elle même associée à la propriété columns par la suite.
Code:
1 2 3 4 5 6
|
if(entete == "sens")
{
colonne.itemRenderer = new ClassFactory(Sens);
colonne.sortCompareFunction = comparaisonItemRenderer; // instruction finalement non indispensable, j'ai testé pour être sur...
} |
Voici mon renderer :
Code:
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
<?xml version="1.0" encoding="utf-8"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init()" >
<fx:Script>
<![CDATA[
import mx.controls.Image;
import spark.components.Label;
private function init():void
{
var image:Image;
if(data.sens == 1)
{
image = new Image();
image.source = "images/up.png";
image.width = 21;
image.height = 20;
image.horizontalCenter = 0;
group.addElement(image);
}
else if(data.sens == 2)
{
image = new Image();
image.source = "images/down.png";
image.width = 21;
image.height = 20;
image.horizontalCenter = 0;
group.addElement(image);
}
else if(data.sens == 0)
{
var label:Label = new Label();
label.percentWidth = 100;
label.text = "inconnu";
label.setStyle("horizontalAlign", "center");
group.addElement(label);
}
}
]]>
</fx:Script>
<s:Group id="group" width="100%" height="100%" />
</s:MXDataGridItemRenderer> |
et là c'est le drame :aie:
J'affiche correctement mes images et mon label mais le tri sur la colonne ne s'effectue plus. J'ai d'abord pensé qu'il fallait que je définisse une fonction de tri ce que j'ai fais :
Code:
1 2 3 4 5
|
protected function comparaisonItemRenderer(obj1:Object, obj2:Object):int
{
return ObjectUtil.numericCompare(Number(obj1.sens), Number(obj2.sens));
} |
->pas de changement. Ensuite j'ai modifié mon itemRenderer au plus simple c'est à dire comme ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
<?xml version="1.0" encoding="utf-8"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
focusEnabled="true">
<s:Label text="{data.sens}" />
</s:MXDataGridItemRenderer> |
Donc là je retrouve bien mon sens valant 0, 1 ou 2 (logique) mais mon tri fonctionne correctement !
Quelqu'un voit il pourquoi mon premier itemRenderer part en vrille pour le tri ? :calim2:
Merci