Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Как программно вызвать сортировку DataGrid? (http://www.flasher.ru/forum/showthread.php?t=144745)

ZpiRit 20.09.2010 12:31

Как программно вызвать сортировку DataGrid?
 
Добрый день. У меня есть DataGrid в котором отображается список пользователей ( XmlList). Этот датагрид осритруется по полю xmlDataProvider.online. Вот в один прекрасный момент я определяю что один из пользователей вышел и я меняю его свойство xmlDataProvider[0].online=0. Проблема в том что после того как я сменил свойство надо отсортировать датагрид по новой, но я ума не приложу как это сделать :( Подскажите пожалуйста.

Волгоградец 20.09.2010 13:23

По хорошему - надо делать сортировку на датаПровайдере компонента. Но если нужна простая сортировка по одному столбцу - то легче отсортировать массив, который ты присваиваешь датаПровайдеру.

Dimitry_II 21.09.2010 16:52

Кстати, думал где-то так ответить (тоже делаю через класс Sort). Но у меня тоже вопрос - а можно ли так отсортировать датагрид, чтобы и сортировка была, и стрелочка сортировки в шапке отображалась?

GBee 21.09.2010 19:21

Вроде стрелочка и так связана с полем sort.

Dimitry_II 21.09.2010 19:56

Не-а, делаю примерно так:
Код AS3:

private var areasCursor:IViewCursor;
...
(_remoteData as RemoteObject).getAreas.addEventListener("result", getAreasResultHandler);
...
private function getAreasResultHandler(event:ResultEvent):void {
        var sort:Sort = new Sort();
        sort.fields = [new SortField("title", true)];
        areas.sort = sort;
        areas.refresh();
        areasCursor = areas.createCursor();
}
...
<mx:ArrayCollection id="areas" list="{(_remoteData as RemoteObject).getAreas.lastResult}"/>
...
<mx:DataGrid id="dg_areas" width="320" height="200" dataProvider="{areas}">
        <mx:columns>
                <mx:DataGridColumn headerText="Areas" dataField="title"/>
        </mx:columns>
</mx:DataGrid>

Отображается все хорошо, при вставке нового снова делаем сорт (если коллекция небольшая) или вставляем в нужное место в зависимости от поля сортировки. Но при этом возможности сортировки самого датагрида не учтены - при первом клике появляется стрелочка и элементы отображены как я их сформировал (скажем, по алфавиту по возрастанию).

Волгоградец 21.09.2010 20:09

В наследнике датаГрида вызывай placeSortArrow(), не забыв предварительно указать порядок сортировки.

Dimitry_II 21.09.2010 20:56

Не, это надо создавать кастомный, переопределять ... муторно из-за одного значка.
Зато заинтересовался этим вопросом и нашел решение:
Код AS3:

(dg_areas.columns[0] as DataGridColumn).sortDescending = true; //или false - это для теста
dg_areas.dispatchEvent(new DataGridEvent(DataGridEvent.HEADER_RELEASE, false, true, 0, "title", 0, null, null, 0));

Причем, можно не заморачиваться с собственным сортингом - встроенный у датагрида точно такой же, просто надо вызвать DataGridEvent с событием HEADER_RELEASE - отсортируется и стрелочку установит.

А что касается приведенного protected метода, то, насколько я понял, он определяет местоположение самого значка, но не производит непосредственно сортировку.

Волгоградец 22.09.2010 11:18

Все правильно - только отрисовывает стрелку.


Часовой пояс GMT +4, время: 00:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.