Flex:获取spark datagrid的自定义itemrenderer中的列索引

时间:2012-01-16 06:37:39

标签: actionscript-3 flex datagrid flex4 itemrenderer

我正在尝试为spark DataGrid中的所有列使用相同的自定义渲染器。我需要知道dataFieldcolumnIndex,我可以在自定义的itemrenderer中更改state

在mx:DataGrid的早期,这可以通过扩展实现MXDataGridItemRenderer的{​​{1}}来实现,因此IDropInListItemRenderer属性可用。

但是使用spark DataGrid,我正在扩展dataGridListData,它不会实现GridItemRenderer,因此无法访问IDropInListItemRenderer属性。我试图编写一个扩展dataGridListData并实现GridItemRenderer的动作脚本类,但flex会在此变量的dataGridListData函数中抛出错误。

有人可以帮助我完成这个吗?

//示例itemRenderer用于set [工作代码]

mx:DataGrid

//示例spark DataGrid itemRenderer [NOT Working]

打包customComponents.myOrgChart {     import mx.controls.dataGridClasses.DataGridListData;     import mx.controls.listClasses.BaseListData;     import mx.controls.listClasses.IDropInListItemRenderer;     import mx.controls.listClasses.IListItemRenderer;

<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        import scripts.valueObjects.CellRendererVO;

        private var _cellRenderer:CellRendererVO = new CellRendererVO();
        [Bindable]
        private var _lineColor:uint = 0xFF0000;
        [Bindable]
        private var _lineWidth:int = 5;

        override public function set data(value:Object):void
        {
            //able to access the dataGridListData.dataField variable
            _cellRenderer = (value[dataGridListData.dataField] as CellRendererVO);
            currentState = _cellRenderer.stateName;
        }

        private function connectingLinesState_enterStateHandler(event:FlexEvent):void
        {
        }

        protected function orgChartNodeState_enterStateHandler(event:FlexEvent):void
        {
        }

    ]]>
</fx:Script>

<s:states>

    <s:State name="emptyState" />

    <s:State name="orgChartNodeState" enterState="orgChartNodeState_enterStateHandler(event)"/>

    <s:State name="connectingLinesState" enterState="connectingLinesState_enterStateHandler(event)"/>

</s:states>

<s:HGroup width="100%" height="100%" includeIn="orgChartNodeState"
          horizontalAlign="center" verticalAlign="middle">


</s:HGroup>

<s:HGroup width="100%" height="100%" includeIn="connectingLinesState"
          gap="0" horizontalAlign="center" verticalAlign="middle"
          paddingLeft="0" paddingRight="0" paddingTop="0"
          paddingBottom="0">


</s:HGroup>

}

谢谢,

1 个答案:

答案 0 :(得分:3)

Spark GridItemRenderer仍然具有data属性,就像任何其他ItemRenderer一样,所以你很好。

除此之外,您需要的是column属性,它返回GridColumn个实例。这与您在创建DataGrid时在mxml中定义的实例相同,因此它具有其所有属性。您最常用的是dataFieldcolumnIndex

例如:

var value:* = data[column.dataField];
var index:int = data[column.columnIndex];