HTML5 / Javascript datatables порядок / сортировка столбцов - PullRequest
0 голосов
/ 10 ноября 2018

В настоящее время я использую таблицы данных из http://datatables.net. У меня есть ряд столбцов, содержащих «неизвестные» данные (т.е. я не могу предварительно установить тип содержимого)

До использования таблиц данных это было простостандартная простая таблица, в которой сортировка выполнялась на стороне сервера с использованием ASP.NET/C#/LINQ orderby (порядковый порядок), и это прекрасно работало практически для любого случая.

Теперь с таблицей данных сортировка по большей части неверна.Особенно числа и комбинации строк и чисел неверны.

Мои случаи ошибок:

  1. Пустые строки всегда в порядке сортировки, я бы хотел, чтобы они были последними.Может с этим жить.
  2. Числа / валюта должны быть правильно упорядочены.В настоящее время порядок заказов такой: 500,12 400,00 1.123,00 223.441,00

Я довольно новичок в этом мире данных / JavaScript.Для случая ошибки я добавил все плагины, которые могу придумать, и протестировал их все, но не смог правильно упорядочить список.

Я думаю, что сортировка, которую я хотел бы иметь, является порядковой (как двоичный файл ASCII), и я мог бы жить, реализовав свою собственную функцию сортировки, если бы я только мог понять, как в JS сделать следующее:

int c = String.Compare(a, b, StringComparison.Ordinal);

1 Ответ

0 голосов
/ 10 ноября 2018

была похожая проблема с таблицами данных некоторое время назад. И это было с датами, отформатированными числами, а также со специальными символами на немецком языке. Ваше имя звучит так, как будто вы из Скандинавии; Я думаю, что это может быть актуально и для вас ...

Вам понадобятся следующие плагины таблиц данных , чтобы сделать все это:

Это для дата / время сортировка: https://datatables.net/plug-ins/sorting/datetime-moment Для этого также требуется moment.js, который я настоятельно рекомендую. https://momentjs.com/

Это для международной сортировки при использовании специальных символов, таких как ä, ö ü и т. Д. https://datatables.net/plug-ins/sorting/intl

А это для отформатированного числа сортировка: https://datatables.net/plug-ins/sorting/formatted-numbers

Приведенные ниже примеры касаются автоматического определения соответствующих полей в зависимости от языка пользователя.

Примеры реализации:

Так что это о форматированных числах. Английский формат будет 1 000 000,99. Немецкий формат 1.000.000,99. Он также заботится о пустых полях.

//sorting of formatted numbers in English and German format
$.extend( $.fn.dataTable.ext.type.order, { 
    "formatted-num-pre": function ( a ) {
        if (lang == 'de') {
            a = a.toString().replace( /[\.]/g, "" );
            a = a.toString().replace( /[\,]/g, "." );
        } else {
            a = a.toString().replace( /[\,]/g, "" );
        }
        a = a.toString().replace( /[^\d.-]/g, "" );
        a = parseFloat(a);
        if ( ! isNaN(a) ) {
            return a;
        } else {
//14 digit negative number to make sure empty cells always stay at the bottom / top
            return -99999999999999;
        }
    },
    "formatted-num-asc": function ( a, b ) {
            return a - b;
    },
    "formatted-num-desc": function ( a, b ) {
            return b - a;
    }
} );

Речь идет о международной сортировке:

//sorting:
//Use the phonebook variant of the German sort order, 
//which expands umlauted vowels to character pairs: ä → ae, ö → oe, ü → ue.
if (lang === 'de') {
    $.fn.dataTable.ext.order.intl("de-DE-u-co-phonebk");
} else {
    $.fn.dataTable.ext.order.intl("en-GB");
}

И, наконец, сортировка по дате:

//should be positioned after the number formatting to make sure
//date columns don't accidentally are assigned formatted-num
//set parms for date sorting using moment.js
$.fn.dataTable.moment( 'L', momentLocale );

переменная momentLocale в моем примере - это либо 'de', либо 'en-gb'. Соответствующие форматы дат: 10.11.2018 (немецкий) или 10/11/2018 (английский, Великобритания). (В отличие от 11/10/2018 в американском формате, который, как мне кажется, требуетtimeLocale быть «en»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...