有没有办法以某种方式将渲染器应用于网格,以便它不会修改数据提供程序中的值?我有一个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();
}
}
答案 0 :(得分:2)
默认情况下,ItemRenderers不会修改dataProviders。由于您没有显示代码,因此很难判断您编写的代码是否修改了dataProvider。
我想基于dataProvider中与网格中显示的值无关的值对DataGrid进行排序;你应该在DataGrid上使用sortCompareFunction。
答案 1 :(得分:2)
问题在于这一行:
data[DataGridListData(listData).dataField] = MyClass.convertValue(data[DataGridListData(listData).dataField]);
就在那里,您将字段值设置为不同的值。
不要使用自定义渲染器,只需使用在该字段上执行convertValue的labelFunction。然后,非自定义渲染器将从DataGridListData中获取标签值,并将其用于显示的值。