Flex DataGrid со столбцом номера строки - PullRequest
2 голосов
/ 03 июня 2009

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

Ответы [ 5 ]

2 голосов
/ 27 марта 2010

Это сработало для меня:

<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 голосов
/ 20 июня 2013

Просто используйте этот класс в качестве 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();
        }
    }
}
0 голосов
/ 13 июня 2009

Я смог сделать это, реализовав пользовательский 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 голосов
/ 25 октября 2009

как насчет следующего:

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 голосов
/ 04 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...