【问题标题】:Value in Datagrid itemrenderers set data method doesn't return the correct dataDatagrid itemrenderers 设置数据方法中的值不返回正确的数据
【发布时间】:2012-01-10 11:06:14
【问题描述】:

我在 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 显然可以正常工作。

根据要求,这是我的数据网格;

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

_listItems 是一个具有模型类实例的 ArrayList,该模型类具有(除其他外)一个称为 Number 类型更改的属性。

【问题讨论】:

  • 试试&lt;s:MXDataGridItemRenderer/&gt;
  • 抛出以下错误:VerifyError:错误 #1014:找不到类 mx.controls.dataGridClasses::DataGridListData。
  • 您可以添加您的 DataGrid 代码吗?更容易判断我们是否可以看到您如何为该列分配数据提供者和项目渲染器。
  • 如果在set data函数中设置断点并调试,value参数的值是多少?它是空的吗?应该是Object,那你怎么能指望Object被转换成Number
  • 是的,它是对象,确切地说是 myModel 类型。我所追求的是属性(更改),但它是一个数字。

标签: apache-flex datagrid itemrenderer


【解决方案1】:

这样做:

        [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

【讨论】:

  • 这就是问题所在,我不能那样做,因为 DataGrid 有可变列,而模型类有大量可以显示在网格列中的属性,所以使用固定值在这里(如更改)是不可能的。
猜你喜欢
  • 2019-11-22
  • 1970-01-01
  • 2015-05-31
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多