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;
}
}
}
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;
}
}
}