Flex: Как отсортировать столбец в таблице данных на несколько дней (понедельник, вторник, среда)? - PullRequest
1 голос
/ 12 февраля 2010

У меня есть столбец в сетке данных, который имеет значения «понедельник», «вторник» и т. Д., Как varchars, и я хотел знать, как отсортировать столбец в правильном порядке.Нормальная сортировка не работает, так как дни не упорядочены в алфавитном порядке (ср. После четверга).Я предполагаю что-то вроде itemrenderer, но у кого-нибудь есть фрагмент кода, чтобы проиллюстрировать, как это будет работать?

Спасибо

1 Ответ

1 голос
/ 12 февраля 2010

Насколько я знаю, нет ничего встроенного ни для сортировки дней недели, ни для получения номера дня по дню недели, поэтому вам нужно построить оба. Вам не нужен пользовательский itemRenderer для сортировки, просто функция сравнения сортировки.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            [Bindable]
            private var days:ArrayCollection = 
                                new ArrayCollection([{day: "Wednesday"},
                                                    {day: "Thursday"},
                                                    {day: "Monday"},
                                                    {day: "Tuesday"},
                                                    {day: "Sunday"},
                                                    {day: "Saturday"},
                                                    {day: "Friday"}
                                                    ]);

            private static var dayMap:Object = {
                                            Sunday: 0,
                                            Monday: 1,
                                            Tuesday: 2,
                                            Wednesday: 3,
                                            Thursday: 4,
                                            Friday: 5,
                                            Saturday: 6};

            private function daySorter(day1:Object, day2:Object):int {
                var i1:int = dayMap[day1.day];
                var i2:int = dayMap[day2.day];

                return i1 < i2 ? -1 : i1 == i2 ? 0 : 1;
            }
        ]]>
    </mx:Script>

    <mx:DataGrid dataProvider="{days}">
        <mx:columns>
            <mx:DataGridColumn dataField="day" sortCompareFunction="{daySorter}" />
        </mx:columns>
    </mx:DataGrid>
</mx:Application>
...