Сортировка по столбцу Дата в Datatables.net - PullRequest
0 голосов
/ 07 февраля 2020

Я не могу понять это, чтобы правильно отсортировать столбцы даты. Я использовал это в качестве ссылки https://datatables.net/blog/2014-12-18. Я использую asp. net с мастер-страницами.

Я включаю в следующем порядке:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
<script type="text/javascript" src="<%=ResolveUrl("~/Assets/js/plugins/jquery.dataTables.min.js")%>"></script>
<script type="text/javascript" src="https://cdn.datatables.net/plug-ins/1.10.20/sorting/datetime-moment.js"></script>

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

function formatDatatable(id, printableColumns) {
                $(id).DataTable({
                    "pagingType": "full_numbers",
                    "lengthMenu": [
                        [10, 25, 50, -1],
                        [10, 25, 50, "All"]
                    ],
                    responsive: {
                        breakpoints: [
                            { name: 'desktop', width: Infinity },
                            { name: 'tablet', width: 1024 },
                            { name: 'fablet', width: 768 },
                            { name: 'phone', width: 480 }
                        ]
                    },
                    language: {
                        search: "_INPUT_",
                        searchPlaceholder: "Search records",
                    },
                    dom: 'Bfrtip',
                    buttons: [
                        'copy',
                        {
                            extend: 'excel',
                            exportOptions: {
                                columns: printableColumns
                            },
                        },
                        {
                            extend: 'pdf',
                            exportOptions: {
                                columns: printableColumns
                            }
                        },
                        {
                            extend: 'print',
                            exportOptions: {
                                columns: printableColumns
                            }
                        }
                    ]
                });
            }

Кроме того, на главной странице у меня есть следующий код:

            $(document).ready(function () {
                    console.log(moment('Dec 1 2019 12:00AM', 'MMM d YYYY hh:mma').isValid()); //validates to true
                    $.fn.dataTable.moment('MMM d YYYY hh:mma');
                });

}

И, наконец, последняя функция, которая, на мой взгляд, необходима. Я попытался добавить это в $ (документ) .ready и вне его с тем же результатом. Я добавил несколько журналов, и он будет печатать test1 и test2 при загрузке данных, но он не будет создавать журналы после форматирования таблиц, и я пытаюсь отсортировать столбец.

$.fn.dataTable.moment = function (format, locale) {
                    console.log("test1");
                    var types = $.fn.dataTable.ext.type;

                    // Add type detection
                    types.detect.unshift(function (d) {
                        console.log("test2");
                        return moment(d, format, locale, true).isValid() ?
                            'moment-' + format :
                            null;
                    });

                    // Add sorting method - use an integer for the sorting
                    types.order['moment-' + format + '-pre'] = function (d) {
                        console.log("test3");
                        return moment(d, format, locale, true).unix();
                    };
                };

Вот некоторые из даты в таблице, которые я пытаюсь отсортировать: De c 1 2019 12:00 AM, 2 января 2020 3:58 AM, 1 января 2023 11:59 PM

Любая помощь с этим будет признательна.

1 Ответ

0 голосов
/ 12 февраля 2020

Я воспользовался советом VDWWD в комментариях выше. Я обновил, чтобы вернуть скрытый промежуток с моими данными, вместо того, чтобы использовать момент js, который вызывал у меня много проблем.

Сначала я создал функцию, которая получает обнуляемую дату / время:

public static string createDateColumnSpan(DateTime? date)
    {
        //if there is a date, format it
        if(date != null)
        {
            return "<span class='d-none'>" + Convert.ToDateTime(date).ToString("yyyyMMddHHmm") + "</span>";
        }
        //else return empty string
        else
        {
            return "";
        }
    }

В моих запросах linq я смог вызвать функцию следующим образом:

//get a list of events
var eventList = (from e in db.Events orderby e.DueDate select new
                {
                    e.ID,
                    e.DueDate
                }).AsEnumerable().Select(x => new
                {
                    x.ID,
                    DueDate = createDateColumnSpan(x.DueDate) + x.DueDate.ToString(),
                });

После этого столбец правильно отсортирован на стороне клиента с таблицами данных. net

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