2009-06-03 5 views
2

Я хочу расширить компонент DataGrid так, чтобы был столбец (только для чтения) для номера строки, как вы видите в электронных таблицах. Я столкнулся с этой статьей http://www.cflex.net/showFileDetails.cfm?ObjectID=735, но это зависит от уникальных данных для каждой строки, чтобы она могла индексироваться в массив. Если данные не уникальны (например, для пустой сетки), это не работает. Как я могу это реализовать?Flex DataGrid с номером номера строки

ответ

-1

Я был в состоянии сделать это путем реализации пользовательских 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

убедитесь, что dataProvider имеет уникальный столбец или свойство, а затем не показывать этот столбец/свойство, если вы не хотите. Ключ DataProvider

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

Cheers.

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(); 
     } 
    } 
} 
Смежные вопросы