Kendo MVC UI Grid - отображать пустую строку как дату для нулевой даты или даты по умолчанию (1900-01-01 00: 00: 00.000) - PullRequest
0 голосов
/ 28 июня 2019

Два столбца даты в Grid, и я пытаюсь установить пустую строку для нулевой даты или даты по умолчанию.

columns.Bound(p => p.DateCreated).Format("{0:dd/MM/yyyy HH:mm}").Filterable(false).Width(120);
columns.Bound(p => p.LastLogIn).Format("{0:dd/MM/yyyy HH:mm}").Filterable(false).Width(120);

Оба поля могут иметь значение NULL в классе Model.

public DateTime? DateCreated { get; set; }
public DateTime? LastLogIn { get; set; }

В SQLТаблица сервера, оба столбца DATETIME, но значения

DateCreated = 1900-01-01 00:00:00.000
LasLogIn = NULL

Значения в режиме отладки,

enter image description here

Но отображается таблицапустая строка для LastLogIn, 31/12/1899 для DateCreated

enter image description here

Поэтому я добавил ClientTemplate в DateCreated для форматированияdate

columns.Bound(p => p.DateCreated).Format("{0:dd/MM/yyyy HH:mm}").Filterable(false).ClientTemplate("#=formatDate(DateCreated)#").Width(120);

CASE 1: По мере отображения 31/12/1899 изменена функция в https://www.telerik.com/forums/date-clienttemplate-and-editortemplatename-for-nullable-or-0-dates

function formatDate(_date) {
    console.log("Input " + _date);
    var formated1900 = kendo.format("{0:d}", new Date(1900, 0, 1));
    console.log("formated1900 " + formated1900);
    var formated1899 = kendo.format("{0:d}", new Date(1899, 12, 31));
    console.log("formated1899 " + formated1899);
    var formatedDate = kendo.format("{0:d}", _date);
    console.log("formated Input " + formatedDate);
    if (formated1900 == formatedDate || formated1899 == formatedDate) {
        console.log("True " + formatedDate);
        return "";
    }
    else {
        console.log("False " + formatedDate);
        return kendo.format("{0:dd/MM/yyyy HH:mm}", _date);
    }
}

Консольный вывод для CASE 1

Input Sun Dec 31 1899 22:55:25 GMT+0655 (Singapore Standard Time)
formated1900 1/1/1900
formated1899 1/31/1900
formated Input 12/31/1899
False 12/31/1899

CASE 2 При форматировании до 31.01.1900 я снова изменил функцию как

function formatDate(_date) {
    console.log("Input " + _date);
    var formated1900 = kendo.format("{0:d}", new Date(1900, 0, 1));
    console.log("formated1900 " + formated1900);
    var formated1899 = kendo.format("{0:d}", new Date(1900, 1, 31));
    console.log("formated1899 " + formated1899);
    var formatedDate = kendo.format("{0:d}", _date);
    console.log("formated Input " + formatedDate);
    if (formated1900 == formatedDate || formated1899 == formatedDate) {
        console.log("True " + formatedDate);
        return "";
    }
    else {
        console.log("False " + formatedDate);
        return kendo.format("{0:dd/MM/yyyy HH:mm}", _date);
    }
}

Консольный вывод для CASE 2

Input Sun Dec 31 1899 22:55:25 GMT+0655 (Singapore Standard Time)
formated1900 1/1/1900
formated1899 3/3/1900
formated Input 12/31/1899
False 12/31/1899

Поскольку kendo.format возвращает другую дату, не удалось установить пустую строку для DateCreated.

Любой другой подход для решения этой проблемы?

Спасибо.

...