Два столбца даты в 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
Значения в режиме отладки,
Но отображается таблицапустая строка для LastLogIn
, 31/12/1899 для DateCreated
Поэтому я добавил 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
.
Любой другой подход для решения этой проблемы?
Спасибо.