【问题标题】:Flex: get column index in custom itemrenderer for spark datagridFlex:在自定义 itemrenderer 中为 spark datagrid 获取列索引
【发布时间】:2012-02-11 04:31:30
【问题描述】:

我正在尝试对 sparkDataGrid 中的所有列使用相同的自定义渲染器。我需要知道dataField 或columnIndex,据此我可以在我的自定义itemrenderer 中更改state。

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

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

谁能帮我完成这个?

//mx:DataGrid[工作代码]使用的示例itemRenderer

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

// 示例 spark DataGrid itemRenderer [不工作]

包 customComponents.myOrgChart { 导入 mx.controls.dataGridClasses.DataGridListData; 导入 mx.controls.listClasses.BaseListData; 导入 mx.controls.listClasses.IDropInListItemRenderer; 导入 mx.controls.listClasses.IListItemRenderer;

import spark.components.gridClasses.GridItemRenderer;

public class TestRenderer extends GridItemRenderer implements IListItemRenderer, IDropInListItemRenderer
{

    private var _listData:BaseListData;

    public function TestRenderer()
    {
        super();
    }

    override public function set data(value:Object):void
    {
        //Flex throws error here.
        //ERROR: TypeError: Error #1009: Cannot access a property or method of a null object reference.
        trace('dataField: ' + DataGridListData(listData).dataField);
    }

    public function get listData():BaseListData
    {
        return _listData;
    }

    public function set listData(value:BaseListData):void
    {
        _listData = value;
    }
}

}

谢谢,

安吉

【问题讨论】:

    标签: actionscript-3 apache-flex datagrid flex4 itemrenderer


    【解决方案1】:

    Spark GridItemRenderer 仍然有一个 data 属性,就像任何其他 ItemRenderer 一样,所以你没问题。

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

    例如:

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

    【讨论】:

    • 感谢您的回复。我使用了 column 对象,但它仍然抛出同样的错误。
    • @Anji 这真的不应该发生。您不会尝试将其转换为 DataGridListData,是吗?
    • 不。这就是我想要做的。在设置数据函数中,我添加了data[column.dataField] 行,我得到了那个错误
    • 我搞定了。问题出在我的数据提供者上。谢谢。
    猜你喜欢
    • 2013-03-01
    • 2012-03-16
    • 2011-04-30
    • 2011-05-02
    • 2012-05-29
    • 1970-01-01
    • 2011-06-05
    • 2011-01-26
    • 1970-01-01
    相关资源
    最近更新 更多