2011-05-31 35 views
2

我在动作脚本中使用itemRenderer作为datagird列(以特定方式显示超链接形式的数据)。如何在排序后刷新Flex数据网格的项目渲染器?

一切工作正常,直到我排序的DataGrid的任何列!当我进行排序并单击此列中的项目时,它会将错误的数据传递给onCustomLink函数。我想它是基于itemRenderer的原始索引传递旧数据。不知何故,itemRenderer类(CustomLinkRenderer)不刷新其数据!

我试图把数据网格的headerRelease上的invalidateDisplayList,ValidateNow(),但没有帮助!我甚至尝试在headerRelease()上刷新数据提供者,但没有帮助...

有人指出我应该怎么做才能刷新为headerRelease事件上的此datagrid创建的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); 

谢谢...

+0

显示更多的代码。如果排序是问题,则发布排序代码。也听起来像你的渲染器不能正常工作,所以也发布代码。 – 2011-05-31 17:34:20

+0

我通常通过Filter函数手动对数据源(数组集合)进行排序,除了取决于Flex内部排序。由于您正在将数据填充到组件中,然后通过项目渲染将其附加到IList控件,这显然会导致问题,主要原因可能是由于组件的复杂性。 – Anandh 2011-05-31 19:49:11

回答

4

我猜了一下。我不清楚你提供的代码片段在你的代码中的位置。

但是,这听起来像你的itemRenderer没有正确更新自己。 itemRenderer应该监听dataChange事件;应该在dataProvider排序时调用它。里面的渲染器做这样的事情:

this.addEventListener('dataChange',onDataChange); 

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

是的Flextras ...我想这是我需要做的...但你能指导我怎么做来更新itemRenderer的显示? – Tintin 2011-06-01 16:29:10

+0

我知道答案在于Flextras的答案 - 只是我还想知道我该怎么做来更新itemRenderer的显示?正如//中所提到的那样,要更新itemRenderer的显示... – Tintin 2011-06-14 15:00:22

+0

这取决于itemRenderer中的内容。一个示例可能是:labelDisplay.text =(data as myCustomObject).myStringProperty – JeffryHouser 2011-06-14 15:39:16

0

嗯,你的代码是不是很清楚,因为你没有指定哪些数据网格,您使用的项目渲染器或如何你实际上排序。

不过,我相当肯定,你的问题是因为你没有刷新你的ArrayCollection:需要

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

的刷新,让数据网格知道更新项目渲染器的新数据。

+0

我已经这样做了,但它没有帮助... – Tintin 2011-06-01 16:28:14

+0

然后代码在哪里? – 2011-06-01 16:44:56

相关问题