2009-06-03 11 views
2

Je souhaite étendre le composant DataGrid de sorte qu'il existe une colonne (en lecture seule) pour le numéro de ligne, comme vous le voyez dans les feuilles de calcul. Je suis tombé sur cet article http://www.cflex.net/showFileDetails.cfm?ObjectID=735 mais cela dépend des données étant unique pour chaque ligne afin qu'il puisse indexer dans le tableau. Si les données ne sont pas uniques (comme pour une grille vide) cela ne fonctionne pas. Comment puis-je l'implémenter?Flex DataGrid avec la colonne de numéro de ligne

Répondre

-1

j'ai pu le faire en mettant en œuvre une coutume itemRenderer, RowNumberRenderer.as

package com.domain 
{ 
    import mx.collections.IList; 
    import mx.controls.Label; 
    import mx.controls.listClasses.ListBase; 

    public class RowNumberRenderer extends Label 
    { 
     public function RowNumberRenderer() 
     { 
      super(); 
     } 

     override public function set data(value:Object):void 
     { 
      super.data = value; 
      this.text = String(IList(ListBase(listData.owner).dataProvider).getItemIndex(data) + 1);      
     } 

    } 
} 
0

Assurez-vous que le fournisseur de données a une colonne ou une propriété unique, alors ne montrez pas cette colonne/propriété si vous ne voulez pas. La clé est le fournisseur de données

-1

comment sur les points suivants:

RendererRowIndexPlusOne.as 
package 
{ 
    import mx.controls.Label; 
    import mx.utils.StringUtil; 
    import mx.utils.ObjectUtil; 

    public class RendererRowIndexPlusOne extends Label 
    { 
     public override function set data(item:Object):void { 
      super.data = item; 

      trace('listData.label ' + listData.label); 
      trace('listData.rowIndex ' + listData.rowIndex); 
      trace('listData.columnIndex ' + listData.columnIndex); 
      trace('listData.owner ' + listData.owner); 

      text = String(listData.rowIndex + 1); 
     } 
    } 
} 
2

Cela a fonctionné pour moi:

<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml"> 
<mx:Script> 
    <![CDATA[ 
     import mx.controls.AdvancedDataGrid; 

     private var handleDataChangedEnabled:Boolean = false; 

     override public function set data(value:Object):void { 
      super.data = value; 

      if (!handleDataChangedEnabled) { 
       addEventListener("dataChange", handleDataChanged); 
      } 
     } 

     public function handleDataChanged(event:Event):void { 
      this.text = String(listData.rowIndex + (listData.owner as AdvancedDataGrid).verticalScrollPosition + 1); 
     } 
    ]]> 
</mx:Script> 

Bien sûr, vous devez remplacer AdvancedDataGrid par DataGrid.

Cheers.

0

Il suffit d'utiliser cette classe comme itemRenderer: RowNumColumnRenderer.as

package 
{ 
    import mx.collections.IList; 
    import mx.controls.AdvancedDataGrid; 
    import mx.controls.Label; 
    import mx.controls.listClasses.ListBase; 

    public class RowNumColumnRenderer extends Label 
    { 
     override public function set data(value:Object):void 
     { 
      super.data = value; 
      if (listData != null) 
       this.text = (AdvancedDataGrid(listData.owner).itemRendererToIndex(this) + 1).toString(); 
     } 
    } 
} 
Questions connexes