кнопка обновления сетки jqgrid не передает фильтры

#jquery #jqgrid #filter

#jquery #jqgrid #Фильтр

Вопрос:

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

это ошибка в jqgrid, или есть что-то, что вы должны сделать явно, чтобы сохранить состояние фильтров столбцов панели инструментов.

есть ли способ заставить это работать?введите описание изображения здесь

Ответ №1:

Как вы можете видеть в исходном коде jqGrid (смотрите Здесь), поведение разработано таким образом. Самой старой версией jqGrid, которую я смог найти, является jqGrid 3.5.2, и в этой версии фильтры сетки также были сброшены.

Если вам нужно другое поведение кнопки перезагрузки, вы можете добавить (используя navButtonAdd) свою пользовательскую кнопку, которая выглядит как оригинальная кнопка перезагрузки (у нее есть «ui-icon-refresh» в качестве buttonicon параметра) и реализовать другое поведение перезагрузки. Например, вы можете просто вызвать trigger("reloadGrid", [{page:1}]) .

Еще одной возможностью для перезагрузки настройки являются события beforeRefresh и afterRefresh.

Комментарии:

1. @Oleg — спасибо за отзыв. Когда вы говорите, что это «по замыслу», вы думаете, кто-нибудь когда-нибудь захочет потерять фильтры при обновлении?? Кажется странным дизайном и скорее недосмотром. .

2. @ooo: Я понимаю, что вы имеете в виду, но во всех реализациях jqGrid кнопка «Обновить» выполняет в точности то же самое: очищает фильтр и перезагружает сетку. Это почти то же самое, что кнопка «Сброс» в диалоговом окне поиска. Если бы я реализовал кнопку «Обновить», я бы реализовал скорее обновление с сервера , а не сброс фильтров. В случае loadonce:true я бы сначала сохранил исходное значение datatype (‘json’ или ‘xml’) и с помощью кнопки «Обновить» я бы сбросил исходное значение datatype и перезагрузил сетку без изменения фильтров.

3. @ooo: Преимущество jqGrid в том, что вы можете относительно легко реализовать нужное вам поведение (см. Мой основной ответ)

4. @Oleg — спасибо за ваши дополнительные мысли. сложная часть заключается в том, чтобы выяснить: 1. есть ли у меня какие-либо фильтры на панели инструментов, 2. есть ли у меня какие-либо расширенные фильтры. 3. передайте их вместе с обновлением

5. @ooo: Вот так $("#items-list").jqGrid({ etc... pager: '#items-pager', etc.... }).navGrid('#items-pager', { search: false, edit: false, add: false, del: false, refresh: false, searchtext: 'Filter' }, {}, {},{}, {closeAfterSearch: true, closeAfterReset: true, multipleSearch: false } ).navButtonAdd("#items-pager", {caption:'', buttonicon: 'ui-icon-refresh', onClickButton: function() {$("#items-list").trigger("reloadGrid");}, position: 'first', title: 'Refresh'} ).filterToolbar({ autosearch: true, stringResult: true, searchOnEnter: false} );