2009-06-03 17 views
2

DataGridコンポーネントを拡張して、スプレッドシートに表示されているような行番号の(読み取り専用の)列を作成します。私はこの記事http://www.cflex.net/showFileDetails.cfm?ObjectID=735に出くわしましたが、配列にインデックスを付けることができるように、各行に固有のデータに依存しています。データが一意でない場合(空のグリッドの場合のように)、動作しません。私はそれをどのように実装できますか?行番号の列を持つFlex DataGrid

答えて

-1

です:

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); 
     } 
    } 
} 
0

dataProviderに固有の列またはプロパティがあることを確認してから、その列またはプロパティを表示しないでください。 キーは以下程度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);      
     } 

    } 
} 
-1

方法を、私はカスタムのitemRendererを実装することにより、これを行うことができたのdataProvider

2

これが私の仕事:

<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> 

もちろん、AdvancedDataGridをDataGridに変更する必要があります。

乾杯。

0

はちょうどあなたの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(); 
     } 
    } 
} 
関連する問題