Проблема в том, что jqGrid имеет нет информации о типе данных. Существуют параметры форматирования, сортировки, редактирования и поиска для создания элементов управления для редактирования или поиска, параметры проверки и т. Д., Но нет информация о типе данных .
Кроме того, jqGrid получает входные данные во многих случаях в виде строк. Даже тип JavaScript number
- это совсем не то, что нужно, потому что JavaScript не имеет, например, integer
типа данных.
Метод getRowData
использует unformatter для чтения строкового содержимого ячеек. В некоторых случаях, например, если вы используете параметр datatype: 'local'
и data
для заполнения сетки, введенные данные сохраняются во внутренних параметрах data
и _index
, и вы можете использовать параметры для получения typed информация о ячейке содержит.
Например, если вы определите столбец, содержащий дату, определение может быть следующим
{ name: 'invdate', index: 'invdate', width: 80, align: 'center',
sorttype: 'date',
formatter: 'date', formatoptions: { newformat: 'd-M-Y' }, editable: true,
datefmt: 'd-M-Y',
editoptions: {
dataInit: function (elem) {
setTimeout(function () {
$(elem).datepicker({
dateFormat: 'dd-M-yy',
autoSize: true,
changeYear: true,
changeMonth: true,
showButtonPanel: true,
showWeek: true
});
}, 100);
}},
editrules: {required: true, date: true},
searchoptions: {
sopt: ['eq', 'ne', 'lt', 'le', 'gt', 'ge'],
dataInit: function (elem) {
setTimeout(function () {
$(elem).datepicker({
dateFormat: 'dd-M-yy',
autoSize: true,
changeYear: true,
changeMonth: true,
showWeek: true,
showButtonPanel: true
});
}, 100);
}}}
Вы видите, сколько мест нужно указать типу даты.
Я бы порекомендовал вам использовать шаблоны столбцов (см. здесь для получения дополнительной информации). В своих проектах, которые я реализую для клиентов, я определяю (в одном общем файле JavaScript) некоторые шаблоны, такие как dateTemplate
, и определяет столбцы в сетке, такие как
.
{name: 'invdate', index: 'invdate', width: 80, template: my.dateTemplate}
, где my.dateTemplate
определяется в упрощенной форме, как
var my = {
dateTemplate: {
align: 'center',
sorttype: 'date',
formatter: 'date', formatoptions: { newformat: 'd-M-Y' }, editable: true,
datefmt: 'd-M-Y',
editoptions: {
dataInit: function (elem) {
setTimeout(function () {
$(elem).datepicker({
dateFormat: 'dd-M-yy',
autoSize: true,
changeYear: true,
changeMonth: true,
showButtonPanel: true,
showWeek: true
});
}, 100);
}},
editrules: {required: true, date: true},
searchoptions: {
sopt: ['eq', 'ne', 'lt', 'le', 'gt', 'ge'],
dataInit: function (elem) {
setTimeout(function () {
$(elem).datepicker({
dateFormat: 'dd-M-yy',
autoSize: true,
changeYear: true,
changeMonth: true,
showWeek: true,
showButtonPanel: true
});
}, 100);
}}}
};
То, как шаблон играет важную роль в качестве типа данных. Если вам нужно, вы можете написать свой собственный безопасный метод на основе параметров getRowData
и template
из colModel
, чтобы получить необходимую информацию.