jqgrid searchToolbar datepicker не фильтруется
Сейчас я использую jqGrid(версия: jqGrid 4.14.1-pre, бесплатная jqGrid) и хотел бы иметь панель инструментов поиска с датчиком. Когда я щелкаю текстовое поле, средство выбора даты успешно появляется, и оно обновляет текстовое поле с выбранной датой. Тем не менее, он не фильтрует данные.
Что я действительно хотел, так это sopt:["le"], но не удалось. Для проверки я тоже попробовал "eq". Но в обоих случаях все строки данных исчезают.
Я установил
loadonce:true
и попробовал
$('#list')[0].triggerToolbar();
Поскольку я использовал более старую версию jqGrid, я обновил последнюю версию в GitHub и попробовал, но все равно не получилось.
{label: 'LockedDate', name: 'LockedDate', index: 'LockedDate', sorttype: 'date', clearSearch: true,
sortable: true,
resizable: false,
hidden: false,
search: true,
formatter: 'date',
formatoptions: {srcformat: 'm/d/Y h:i:s A', newformat: 'm/d/Y h:i:s A'},
searchrules: {date: true},
searchoptions: {
sopt: ["le"],
dataInit: function (element) {
$(element).datepicker({
dateFormat: 'mm/dd/yy',
changeYear: true,
changeMonth: true,
showButtonPanel: true,
onSelect: function () {
$(this).keydown();
$('#list')[0].triggerToolbar();
},
onChange: function () {
$('#list')[0].triggerToolbar(); }
})
}
}
}
Как я правильно помню, я видел ответы Олега на stackru (извините, потерял ссылку), говорящий о проблеме разбора даты и времени в более старой версии. Является ли мой формат даты причиной?
Так как другая панель инструментов поиска работает хорошо, я не думаю, что это проблема самого пейджера или сетки. Может ли кто-нибудь помочь мне, где я неправильно установил DatePicker??
Спасибо!:)
Я не уверен, нужен ли этот код jqGrid, но на всякий случай я добавлю:
$('#list').jqGrid({
url: '/LockedObjects/GetLockedObjects',
datatype: "json",
contentType: "application/json; charset-utf-8",
mtype: 'GET',
colModel: [
{label: 'LockedBy', name: 'LockedBy',index: 'LockedBy', sorttype: 'text', clearSearch: true,},
{
label: 'LockedDate', name: 'LockedDate', index: 'LockedDate', sorttype:'date', clearSearch: true,
sortable: true,
resizable: false,
hidden: false,
search: true,
formatter: 'date',
formatoptions: {srcformat: 'm/d/Y h:i:s A', newformat: 'm/d/Y h:i:s A'},
searchrules: {date: true},
searchoptions: {sopt: ["le"],
dataInit: function (element) {
$(element).datepicker({
dateFormat: 'mm/dd/yy',
changeYear: true,
changeMonth: true,
showButtonPanel: true,
onSelect: function () {
$(this).keydown();
$('#list')[0].triggerToolbar();
},
onChange: function () { $('#tbLockedPartiesHistory')[0].triggerToolbar(); }
})
}
}
}],
rowNum: 20,
rowList: [20, 30, 50],
sortName: 'LockedDate',
ignoreCase: true,
viewrecords: true,
sortOrder: 'asc',
loadonce: true,
multiselect: true,
jsonReader: {
repeatitems: false,
root: 'rows',
page: 'page',
total: 'total'
},
height: 'auto',
pager: '#listPager',
loadError: function (xhr, status, error) {
console.log(xhr);
console.log(status);
console.log(error);
}
});
$('#list').jqGrid('filterToolbar', {searchOnEnter: false, ignoreCase: true, searchOperators:true,defaultSearch: 'cn' });
$('#list').jqGrid('navGrid', '#listPager', {edit: false,
add: false,
del: false,
refresh: true
});
};
1 ответ
Следующие searchoptions
должно сработать:
searchoptions: {
sopt: ["le"], // or any other search operation
dataInit: function (element) {
var self = this; // save the reference to the grid
$(element).datepicker({
dateFormat: 'mm/dd/yy',
changeYear: true,
changeMonth: true,
showButtonPanel: true,
onSelect: function () {
setTimeout(function () {
self.triggerToolbar();
}, 0);
}
});
}
}
Я бы порекомендовал вам внести некоторые дополнительные изменения в свой код, чтобы упростить его или исправить некоторые параметры:
- нет
contentType
вариант в jqGrid. УстановитьcontentType
параметр базовогоjQuery.ajax
Функция, которую следует использоватьajaxGridOptions: { contentType: "application/json; charset-utf-8" }
- лучше убрать варианты
mtype: 'GET'
,ignoreCase: true
,height: 'auto'
, которые имеют значение по умолчанию для бесплатной jqGrid. - опция
sortOrder: 'asc'
должны быть удалены. Есть не существуетsortOrder
опция (толькоsortorder
вариант со значением по умолчанию'asc'
). Точно так же вариантsortName: 'LockedDate'
неправильно и будет проигнорировано. Правильный вариант будетsortname: 'LockedDate'
, - вы должны заменить
jsonReader: {repeatitems: false, root: 'rows', page: 'page', total: 'total' }
вjsonReader: { repeatitems: false }
, Все остальные свойстваroot, page, total
изjsonReader
имеют значение по умолчанию и, следовательно, могут быть пропущены. В большинстве случаев дажеjsonReader: { repeatitems: false }
можно пропустить, потому что бесплатный jqGrid пытается обнаружитьrepeatitems
, - рекомендуется использовать
pager: true
вместоpager: '#listPager'
, Вы можете удалить ненужные<div id="listPager"></div>
со страницы HTML. Free jqGrid создаст соответствующий div автоматически. Вы можете пропустить пейджер в методахnavGrid
,inlineNav
и так далее. ЗовnavGrid
может быть как$('#list').jqGrid('navGrid', {edit: false,..});
в этом случае. - Вы можете указать параметры поиска по умолчанию, такие как
searchOnEnter: false, ignoreCase: true, searchOperators:true, defaultSearch: 'cn'
Внутриsearching
параметр jqGrid. Это упрощает последующее использованиеfilterToolbar
или поиск диалога. Например, вы можете использовать опцию jqGridsearching: { searchOperators: true, defaultSearch: 'cn', closeOnEscape: true, searchOnEnter: true, multipleSearch: true, multipleGroup: true}
, - Рекомендуется удалить
loadError
Перезвоните. Free jqGrid имеет обратный вызов по умолчанию, который будет отображать ошибки при загрузке данных jqGrid с сервера. Ошибки будут отображаться в div между заголовками столбцов и телом сетки (см. Рисунок). УказавloadError
обратный вызов будет отображать меньше информации, так как бесплатный jqGrid отображает значение по умолчанию. - вы должны очистить
colModel
Предметы. Определение столбцаLockedBy
:{label: 'LockedBy', name: 'LockedBy',index: 'LockedBy', sorttype: 'text', clearSearch: true,}
следует заменить на{ name: 'LockedBy', searchoptions: { clearSearch: true } }
, Свойстваlabel, index, sortable, hidden, search
колонныLockedDate
должны быть удалены и имуществоclearSearch: true
должны быть перемещены внутриsearchoptions
,
Вы можете рассмотреть возможность использования multiPageSelection: true
а также forceClientSorting: true
Варианты бесплатных jqGrid дополнительно.
Опция forceClientSorting: true
принудительная локальная сортировка и фильтрация данных, возвращаемых с сервера, до отображения первой страницы. Если вы используете sortname: 'LockedDate'
то сервер должен отсортировать возвращаемые данные по LockedDate
, Если вы используете опцию forceClientSorting: true
Затем сервер может вернуть несортированные данные и бесплатно jqGrid отсортировать данные локально перед отображением первой страницы.
Опция multiPageSelection: true
описано в ответе. Демо демонстрирует результаты. Опция позволяет: 1) удерживать выделение на страницах (можно выбрать строки на одной странице, изменить страницу, выбрать строки на другой странице, вернуться на первую страницу, и ранее выбранные строки будут сохранены) 2) можно предварительно -выбрать строки.