簡體   English   中英

具有行號列的Flex DataGrid

[英]Flex DataGrid with row number column

我想擴展DataGrid組件,以使行號有一個(只讀)列,就像在電子表格中看到的那樣。 我碰到了這篇文章http://www.cflex.net/showFileDetails.cfm?ObjectID=735,但這取決於每一行的數據是唯一的,以便它可以索引到數組中。 如果數據不是唯一的(例如對於一個空的網格),它將不起作用。 我該如何實施?

這對我有用:

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

干杯。

只需將此類用作您的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();
        }
    }
}

確保dataProvider具有唯一的列或屬性,如果不願意,則不要顯示該列/屬性。 關鍵是dataProvider

怎么樣:

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

我能夠通過實現自定義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);                     
        }

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM