Сортировка в AdvancedDatagrid в Flex 3 - PullRequest
       10

Сортировка в AdvancedDatagrid в Flex 3

1 голос
/ 26 августа 2010

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

Я знаю, что мне придется написать собственную функцию сортировки. Но кто-нибудь может дать некоторое представление о том, как поступить.

Заранее спасибо.

1 Ответ

1 голос
/ 26 августа 2010

Использовать sortCompareFunction

Элемент управления AdvancedDataGrid использует эту функцию для сортировки элементов коллекции поставщика данных.Сигнатура функции функции обратного вызова принимает два параметра и имеет следующий вид:

mySortCompareFunction(obj1:Object, obj2:Object):int

obj1 - Элемент данных для сравнения.

obj2 - Другой элемент данныхсравнивать с obj1.

Функция должна возвращать значение, основанное на сравнении объектов:

  • -1, если obj1 должен появляться перед obj2 в порядке возрастания.
  • 0, если obj1 = obj2.
  • 1, если obj1 должен появляться после obj2 в порядке возрастания.
<mx:AdvancedDataGridColumn sortCompareFunction="mySort" 
    dataField="colData"/>

Попробуйте следующую функцию сравнения сортировки.

public function mySort(obj1:Object, obj2:Object):int
{
    var s1:String = obj1.colData;
    var s2:String = obj2.colData;
    var result:Number = s1.localeCompare(s2);
    if(result != 0)
        result = result > 0 ? 1 : -1;
    if(s1.match(/^\d/))
    {
        if(s2.match(/^\d/))
            return result;
        else
            return 1;
    }
    else if(s2.match(/^\d/))
        return -1;
    else 
        return result;
}

Проверяет первый символ строк и толкает те, которые начинаются с цифры вниз, в порядке сортировки.Он использует localeCompare для сравнения двух строк, если они обе начинаются с букв или цифр - в противном случае он говорит, что строка, начинающаяся с буквы, должна предшествовать цифре.Таким образом, abc будет предшествовать 123, но a12 будет по-прежнему предшествовать abc.

Если вам нужен совершенно другой вид, в котором буквы всегда предшествуют числам, независимо от их положения в строке, вам придется написать один с нуля - String :: charCodeAt может быть хорошимместо для начала.

...