欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

FLEX ArrayCollection删除过滤的数据问题解决

程序员文章站 2022-03-21 22:39:43
一、问题: arraycollection添加过滤器后,部门数据不会被展现,当我删除未展现的数据时,调用removeitemat()是无法删除的。 二、原因: 复制代码 代...
一、问题:

arraycollection添加过滤器后,部门数据不会被展现,当我删除未展现的数据时,调用removeitemat()是无法删除的。

二、原因:
复制代码 代码如下:

public function removeitemat(index:int):object
{
if (index < 0 || index >= length)
{
var message:string = resourcemanager.getstring(
"collections", "outofbounds", [ index ]);
throw new rangeerror(message);
}

var listindex:int = index;
if (localindex)
{
var olditem:object = localindex[index];
listindex = list.getitemindex(olditem);
}
return list.removeitemat(listindex);
}

因为var olditem:object = localindex[index];中localindex是一个未被过滤的数据。

三、解决

arraycollection中有list的属性:
复制代码 代码如下:

public function get list():ilist
{
return _list;
}

_list就是原始数据。

所以如果要在添加了过滤器的arraycollection上删除过滤的数据,需要list的帮助。实现代码如下:
复制代码 代码如下:

public function findemployeeinsource(id:int):orgemployee {
var obj:orgemployee = null;
var list:ilist = employees.list;
var len:int = list.length;
for (var index:int = 0; index < len; index++) {
obj = list.getitemat(index) as orgemployee;
if (obj.id == id) {
return obj;
}
}
return null;
}

public function deleteemployee(id:int):void {
var obj:orgemployee = findemployeeinsource(id);
if (obj != null) {
var index:int = employees.list.getitemindex(obj);
employees.list.removeitemat(index);
}
}

或者一个函数:
复制代码 代码如下:

public function deleteemployee(id:int):void {
var obj:orgemployee = null;
var list:ilist = employees.list;
var len:int = list.length;
for (var index:int = 0; index < len; index++) {
obj = list.getitemat(index) as orgemployee;
if (obj.id == id) {
list.removeitemat(index);
return;
}
}
}