flex: как отсортировать GridColumn

Я хочу отсортировать столбец сетки. Вот мой код sortCompareFunction:

protected function sortCompareFunction(obj1:Object, obj2:Object, gc:GridColumn):int
        {
            collator.ignoreCase=true;
            return collator.compare(obj1[gc.dataField], obj2[gc.dataField]);
        }

и сетка данных:

<s:DataGrid id="dataGrid" width="100%" height="100%" borderColor="#CCCCCC" borderVisible="true"
            chromeColor="#CCCCCC" color="#000000" contentBackgroundColor="#8C90BB"
            selectionColor="#D0E4E9" symbolColor="#FFFFFF" sortableColumns="true">
    <s:columns>
        <s:ArrayList>
            <s:GridColumn width="150" dataField="title" headerText="Progetto"
                          sortCompareFunction="sortCompareFunction"></s:GridColumn>
            <s:GridColumn dataField="author" headerText="Stato" width="50"></s:GridColumn>
            <s:GridColumn dataField="newsdate" headerText="Scadenza"></s:GridColumn>
        </s:ArrayList>
    </s:columns>
    <s:AsyncListView list="{FlexGlobals.topLevelApplication.PMProjs.lastResult}"/>
</s:DataGrid>

Не работает. Я не вижу стрелки в заголовке столбца, и все сортируется. Заранее благодарю за любую помощь!

Хорошо, решено заменой AsyncListView на Arraycollection:

<s:DataGrid id="dataGrid" width="100%" height="100%" borderColor="#CCCCCC" borderVisible="true"
            chromeColor="#CCCCCC" color="#000000" contentBackgroundColor="#8C90BB"
            selectionColor="#D0E4E9" symbolColor="#FFFFFF">
    <s:columns>
        <s:ArrayList>
            <s:GridColumn width="150" dataField="title" headerText="Progetto" 
                          showDataTips="title"></s:GridColumn>
            <s:GridColumn dataField="author" headerText="Stato" width="50"></s:GridColumn>
            <s:GridColumn dataField="newsdate" headerText="Scadenza"></s:GridColumn>
        </s:ArrayList>
    </s:columns>
    <s:ArrayCollection list="{FlexGlobals.topLevelApplication.PMProjs.lastResult}"/>

без sortCompareFunction.


person chu    schedule 12.10.2012    source источник
comment
Я считаю, что вам, возможно, придется привязать функцию сортировки вместо того, чтобы просто использовать ее имя (т.е. добавить похвалы {}). В остальном ошибка может быть только в этом collator классе.   -  person RIAstar    schedule 12.10.2012
comment
Спасибо за ответ. Если вы имеете в виду sortCompareFunction = {sortCompareFunction}, это не сработает. Я также попытался использовать return ObjectUtil.stringCompare (obj1, obj2) с obj1 и obj2 как String, но это не имеет эффекта.   -  person chu    schedule 12.10.2012
comment
Возможно, тогда это связано с AsyncListView. Попробуйте заменить его на целевую коллекцию ArrayCollection.   -  person RIAstar    schedule 12.10.2012
comment
Отлично! Теперь он сортирует столбец! Я не устанавливаю свою функцию как sortCompareFunction, потому что она работает неправильно (я не понимаю, как это работает, я точно использую ее плохим способом!), И я прочитал в документация, которую gridColumn использует для сортировки по умолчанию по полю данных. Таким образом, asyncListView избежал сортировки. Не могли бы вы объяснить мне, пожалуйста, почему? Большое спасибо за вашу помощь!   -  person chu    schedule 12.10.2012
comment
Вместо редактирования вопрос добавить решенный в заголовок; пожалуйста, опубликуйте решение как официальный ответ на вопрос.   -  person JeffryHouser    schedule 12.10.2012


Ответы (1)


да. Как предлагает RIAstar, изменение AsyncListView на ArrayCollection поможет. Обратите внимание, что asynclist - это структура данных, созданная Flex.

Также обратите внимание, что Arraylist, определенный внутри тега columns в DataGrid, НЕ нужно менять на Arraycollection. Интересный.

person dbc Austin    schedule 04.02.2013