2011-06-20 8 views
0

J'ai une grille de données avec un composant itemrenderer. Dans l'itemrenderer est un bouton qui devrait être affiché dans chaque deuxième ligne de la grille de données. Il apparaît de cette façon après la compilation.Itemrenderer dans Datagrid mauvais affichage

Dès que je fais défiler la grille de données, les boutons sont mal affichés, pourquoi?

Link to image

<fx:Script> 
    <![CDATA[ 
    import mx.collections.ArrayCollection; 
    import mx.events.FlexEvent; 

    [Bindable] 
    private var _ac:ArrayCollection = new ArrayCollection(); 

    private function applicationComplete(e:FlexEvent):void{ 
     for (var i:Number = 0; i < 100; i++) { 
      var b:Boolean = (i % 2) ? true : false; 
      _ac.addItem({text:'foo' + i, showBtn:b}); 
     } 
    } 

    ]]> 
</fx:Script> 

<mx:DataGrid id="datagrid" dataProvider="{_ac}" width="200"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Text" dataField="text" /> 
     <mx:DataGridColumn headerText="Edit" > 
      <mx:itemRenderer> 
       <fx:Component> 
        <mx:Canvas> 
         <fx:Script> 
          <![CDATA[ 
          override public function set data(value:Object):void { 
           super.data = value; 
           if(value != null){ 
            if (data.showBtn == false) editBtn.visible = false; 
           } 
          } 
          ]]> 
         </fx:Script> 
         <s:Button id="editBtn" label="edit" /> 
        </mx:Canvas> 
       </fx:Component> 
      </mx:itemRenderer> 
     </mx:DataGridColumn> 
    </mx:columns> 

</mx:DataGrid> 

Répondre

1

Parce que le moteur de rendu est réutilisée sur le défilement, vous devez le remettre en mode visible.

changement

if (data.showBtn == false) editBtn.visible = false; 

à

if (data.showBtn == false){ 
    editBtn.visible = false; 
}else{ 
    editBtn.visible = true; 
} 

Ou simplement utiliser cette syntaxe:

editBtn.visible = (data.showBtn as Boolean); 
+0

BTW, si vous utilisez l'étincelle ... pourrait tout aussi bien utiliser la nouvelle étincelle grille de données. Ensuite, vous pouvez utiliser itemRendererFunction et ne définir que itemRenderer sur les cellules où vous avez besoin d'un bouton. –

Questions connexes