Datagrid itemrenderers中的值设置数据方法不会返回正确的数据

时间:2012-01-10 11:06:14

标签: flex datagrid itemrenderer

我在Datagrid(Spark)中有一个Gridcolumn。 Column的dataprovider是一个通过Binding更新的Number值。

现在,如果没有项呈示器,单元格将显示正确的值。 如果我设置了项目渲染器,则无法访问此渲染器中的值。

我的渲染器看起来像这样,所以这里没有什么真正的(现在)但要追踪值,但值总是NaN。

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" width="100%" height="100%" >

<fx:Script>
    <![CDATA[

        override public function set data(value:Object):void {
            trace(Number(value));
        }

    ]]>
</fx:Script>

</s:GridItemRenderer>

我真的不明白为什么会这样,所以任何见解都会非常感激!同样,如果没有渲染器,该列将显示正确的值,因此显然DefaultGridItemRenderer工作正常。

根据要求,这是我的Datagrid;

<s:DataGrid id="dataGrid" dataProvider="{_listItems}">
    <s:columns>
        <s:ArrayList>
            <s:GridColumn dataField="change" headerText="Change" itemRenderer="myitemrenderer" />
    ...
</s:DataGrid>

_listItems是一个带有模型类实例的ArrayList,其中包含一个名为Change的类型为Number的属性。

1 个答案:

答案 0 :(得分:0)

这样做:

        [Bindable]
        private var simpleDataProvider:ArrayCollection = new ArrayCollection([{first: "this", second: "is", third:"test", fourth:"data"}, 
            {first:"not", second:"full", third: "row"}]);

数据网格:

<s:DataGrid id="dg" dataProvider="{simpleDataProvider}">
    <s:columns>
        <s:ArrayCollection>
            <s:GridColumn dataField="first"/>
            <s:GridColumn itemRenderer="Group.TestRenderer3"/>          
            <s:GridColumn dataField="third"/>
            <s:GridColumn dataField="fourth"/>
        </s:ArrayCollection>
    </s:columns>        
</s:DataGrid>

项目渲染器:

<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark" 
                    xmlns:mx="library://ns.adobe.com/flex/mx" clipAndEnableScrolling="true">

    <fx:Script>
        <![CDATA[
            override public function set data(value:Object):void
            {
                lblData.text = value.second;
            }
        ]]>
    </fx:Script>

    <s:Label id="lblData" top="9" left="7"/>

</s:GridItemRenderer>

最重要的是value.second在您的情况下应该是value.change