不改变dataprovider的渲染器

时间:2011-08-08 14:52:16

标签: flex actionscript-3

有没有办法以某种方式将渲染器应用于网格,以便它不会修改数据提供程序中的值?我有一个datagrid,在其中一个列上我有一个客户渲染器,它覆盖了set数据函数,并将dataprovider中的number值转换为一个单词。我的问题是,当我按该列对网格进行排序时,它按新值排序,而我希望它按最初在数据提供者中的旧值进行排序。

这是我的渲染器:

public class MyRenderer extends Text {

     override public function set data(value:Object):void {
        super.data = value;
        data[DataGridListData(listData).dataField] = MyClass.convertValue(data[DataGridListData(listData).dataField]);
        super.invalidateDisplayList();
    }
}

2 个答案:

答案 0 :(得分:2)

默认情况下,ItemRenderers不会修改dataProviders。由于您没有显示代码,因此很难判断您编写的代码是否修改了dataProvider。

我想基于dataProvider中与网格中显示的值无关的值对DataGrid进行排序;你应该在DataGrid上使用sortCompareFunction

答案 1 :(得分:2)

问题在于这一行:

data[DataGridListData(listData).dataField] = MyClass.convertValue(data[DataGridListData(listData).dataField]); 

就在那里,您将字段值设置为不同的值。

不要使用自定义渲染器,只需使用在该字段上执行convertValue的labelFunction。然后,非自定义渲染器将从DataGridListData中获取标签值,并将其用于显示的值。