如何在排序后刷新flex数据网格的项呈示器?

时间:2011-05-31 15:34:20

标签: flex actionscript-3

我在动作脚本中使用itemRenderer作为datagird列(以某种方式显示形式的超链接)。

一切正常,直到我对datagrid的任何列进行排序!当我进行排序并单击此列中的项目时,它会将错误的数据传递给onCustomLink上的函数。我猜它是基于itemRenderer的原始索引传递旧数据。以某种方式,itemRenderer类(CustomLinkRenderer)没有刷新其数据!

我尝试在datagrid的headerRelease上放置invalidateDisplayList,ValidateNow()但没有帮助!我甚至尝试刷新headerRelease()上的dataprovider,但没有帮助......

有人可以指出我应该做些什么来刷新在headerRelease事件中为此数据网格创建的itemRenderer实例?

private var _col1:DataGridColumn;
var rendr1:ClassFactory = new ClassFactory(CustomLinkRenderer);
 _col1.dataField = 'emp_name'; 
 rendr1.properties = {SelCustomLinkName: 'emp_name'};   
                                _col1.itemRenderer = rendr1;
this.addEventListener(CustomLinkRendererEvent.CUSTOM_LINK_RENDERER_EVENT,onCustomLink);

...谢谢

2 个答案:

答案 0 :(得分:4)

我猜了一下。我不清楚您提供的代码段在您的代码中显示的确切位置。

但是,听起来像你的itemRenderer没有正确更新自己。 itemRenderer应该监听dataChange事件;在对dataProvider进行排序时应该调用它。在渲染器内部执行以下操作:

this.addEventListener('dataChange',onDataChange);

public function onDataChange(event:Event):void{
 // do stuff to update the itemRenderer's display
}

答案 1 :(得分:0)

好吧,你的代码不是很清楚,因为你没有指定你正在使用的数据网格,项目渲染器或你实际排序的方式。

但是,我很确定你的问题是因为你没有刷新你的ArrayCollection:

arrayCollection.sort();
arrayCollection.refresh();

需要刷新才能让datagrid知道用新数据更新项目渲染器。