ArrayCollection删除排序

时间:2009-08-03 22:03:09

标签: flex

对我的dataprovider(Array Collection)应用数字排序后,我无法通过tilelist重新排序项目。我是否需要从arrayCollection中删除排序。如果是这样,是否只是设置collection.sort = null?

的情况
var sortField:SortField=new SortField();
sortField.name="order";
sortField.numeric=true;
var sort:Sort=new Sort();
sort.fields=[sortField];

3 个答案:

答案 0 :(得分:4)

将sort设置为null确实应该删除集合的排序。您可能需要执行可选的refresh()。

答案 1 :(得分:1)

Source

  

Adob​​e Flex - 按日期排序ArrayCollection

/**
* @params data:Array
* @return dataCollection:Array
**/
private function orderByPeriod(data:Array):Array
{
 var dataCollection:ArrayCollection = new ArrayCollection(data);//Convert Array to ArrayCollection to perform sort function

 var dataSortField:SortField = new SortField();
 dataSortField.name = "period"; //Assign the sort field to the field that holds the date string

 var numericDataSort:Sort = new Sort();
 numericDataSort.fields = [dataSortField];
 dataCollection.sort = numericDataSort;
 dataCollection.refresh();
 return dataCollection.toArray();
}

答案 2 :(得分:1)

我也遇到了这个问题,我找到了你的问题,而且我仍然没有像Christophe所说的那样解决它。

经过一段时间的苦难之后,我发现了一种避免你提到的问题的方法。

只需使用辅助ArrayCollection进行排序。无论如何你的Sort实例似乎是临时的(你想要通过它),那么为什么不使用临时的ArrayCollection?

以下是我的代码的样子:

// myArrayCollection is the one to sort

// Create the sorter
var alphabeticSort:ISort = new Sort();
var sortfieldFirstName:ISortField = new SortField("firstName",true);
var sortfieldLastName:ISortField = new SortField("lastName",true);
alphabeticSort.fields = [sortfieldFirstName, sortfieldLastName];

// Copy myArrayCollection to aux
var aux:ArrayCollection = new ArrayCollection();
while (myArrayCollection.length > 0) {
    aux.addItem(myArrayCollection.removeItemAt(0));
}

// Sort the aux
var previousSort:ISort = aux.sort;
aux.sort = alphabeticSort;
aux.refresh();
aux.sort = previousSort;

// Copy aux to myArrayCollection
var auxLength:int = aux.length;
while (auxLength > 0) {
    myArrayCollection.addItemAt(aux.removeItemAt(auxLength - 1), 0);
    auxLength--;
}

这不是最新的代码,它有一些奇怪的黑客,比如auxLength而不是aux.length(这个给了我-1数组范围异常),但至少它解决了我的问题。