Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 排序后如何刷新flex datagrid的项目呈现器?_Apache Flex_Actionscript 3 - Fatal编程技术网

Apache flex 排序后如何刷新flex datagrid的项目呈现器?

Apache flex 排序后如何刷新flex datagrid的项目呈现器?,apache-flex,actionscript-3,Apache Flex,Actionscript 3,我使用一个itemRenderer作为动作脚本中的datagird列(以某种方式以超链接的形式显示数据) 在我对datagrid的任何列进行排序之前,一切都正常!当我进行排序并单击此列中的项时,它会将错误的数据传递给函数onCustomLink。我猜它是在传递基于itemRenderer原始索引的旧数据。不知何故,itemRenderer类(CustomLinkRenderer)没有刷新其数据 我尝试将invalidateDisplayList、ValidateNow()放在datagrid的h

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

在我对datagrid的任何列进行排序之前,一切都正常!当我进行排序并单击此列中的项时,它会将错误的数据传递给函数onCustomLink。我猜它是在传递基于itemRenderer原始索引的旧数据。不知何故,itemRenderer类(CustomLinkRenderer)没有刷新其数据

我尝试将invalidateDisplayList、ValidateNow()放在datagrid的headerRelease上,但没有任何帮助!我甚至尝试刷新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);

谢谢…

我猜一点。我不清楚您提供的代码片段在代码中的确切位置

但是,在我看来,您的itemRenderer没有正确地更新自身。itemRenderer应该侦听dataChange事件;当对数据提供程序进行排序时,应该调用它。在渲染器中执行以下操作:

this.addEventListener('dataChange',onDataChange);

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

嗯,您的代码不是很清楚,因为您没有指定要使用的datagrid、项呈现器或实际排序方式

但是,我相当肯定您的问题是因为您没有刷新ArrayCollection:

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

需要刷新以让datagrid知道如何使用新数据更新项目呈现器。

显示更多代码。如果排序有问题,请张贴排序代码。听起来你的渲染器工作不正常,所以也发布代码。除了取决于Flex内部排序之外,我通常通过过滤函数手动对数据源(数组集合)进行排序。由于您将数据填充到组件中,然后该组件通过项呈现连接到IList控制,这显然会导致问题,主要原因可能是组件的复杂性。是的Flextras。。。我想这就是我需要做的。。。但你能告诉我怎么更新itemRenderer的显示吗?我知道答案就在Flextras的答案中——只是我仍然想知道我应该怎么更新itemRenderer的显示?正如//do stuff to updatet the itemRenderer’s display中提到的,这取决于itemRenderer中的内容。一个示例可能是:labelDisplay.text=(数据作为myCustomObject)