В jqgrid, почему не работают вместе toolbarfilter и фильтр множественного поиска (при использовании stringResult:true)

У меня есть веб-сайт с jqgrid, и я хочу использовать оба:

  • Поиск панели инструментов
  • Расширенный мульти-поиск (с использованием множественного поиска : правда)

Я использую настройку toolbarfilter используя:

$("#grid").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: true })

Таким образом, у пользователей есть 2 способа фильтрации.

Мои проблемы:

  1. Текст панели инструментов удаляется после расширенного фильтра (и не учитывается в поисковом запросе)
    Если у меня есть поиск на панели инструментов и нажмите Enter. работает отлично. Если я затем использую щелчок на расширенном мульти-поиске и ввожу некоторые критерии, он "перезапишет" критерии фильтра, НО оставляет текст на панели фильтров панели инструментов, поэтому, когда вы видите результаты, они сбивают с толку, поскольку набор результатов не совпадает с что вы видите на панели инструментов фильтра текста.

  2. Движение вперед и назад не уважает друг друга. Я настроил первоначальный набор множественных фильтров, он прекрасно работает. Затем я ввожу некоторый текст в фильтр панели инструментов и нажимаю клавишу ВВОД, он отправляет ТОЛЬКО тот фильтр, который формирует панель инструментов, на сервер (таким образом, перезаписывая существующие фильтры, установленные из предварительного фильтра - которые теперь ушли). Если я вернусь к расширенному фильтру, он перечислит старый фильтр, который я изначально отправил (а не последний фильтр, сгенерированный из фильтра панели инструментов). Есть ли в любом случае toolbarfilter и advancedfilter могут работать вместе и всегда создавать накопительный фильтр из обоих входов пользовательского интерфейса, вместо того, чтобы перезаписывать друг друга в запросе к серверу.

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

Обновить:

это изображение в ответ на первый ответ Олега:

1 ответ

Решение

Все, что вы делаете, абсолютно правильно. Я бы порекомендовал вам продолжать использовать ту же конфигурацию: панель инструментов фильтрует для быстрого, интуитивно понятного и простого поиска / фильтрации данных и расширенного поиска для расширенного поиска, чтобы создавать более сложные фильтры.

В текущей версии jqGrid модуль расширенного поиска использует postData.filters загрузить начальные фильтры. Фильтр панели инструментов, выполняющий поиск на другой стороне, не считывает данные с postData.filters и просто установить его.

Если вы хотите сохранить отдельные фильтры для панели инструментов и выполнить расширенный поиск, я могу предложить следующий прием. Вы можете открыть расширенный фильтр сразу после инициализации сетки. Модуль поиска adnavce прочитал postData.filters при первом открытии диалогового окна, только если настройки по умолчанию recreateFilter: false а также loadDefaults: true используются. После открытия вы можете сразу же закрыть диалоговое окно поиска, которое будет только отключено и не будет удалено.

var grid = $("#list"), prmSearch = {multipleSearch:true,overlay:false};
grid.jqGrid({
   // ... jqgrid parameters
});
grid.jqGrid('navGrid','#pager',
            {add:false,edit:false,del:false,search:true,refresh:true},
            {},{},{},prmSearch);
// open the advance searching dialog
grid.searchGrid(prmSearch);
// close the advance searching dialog
$("#fbox_"+grid[0].id+" div.ui-closer").trigger("click");
grid.jqGrid('filterToolbar',{defaultSearch:'cn',stringResult:true});

Теперь вы можете использовать как панель инструментов, так и расширенный поиск с отдельными фильтрами. Из-за использования overlay:false Параметр в диалоговом окне поиска позволяет даже сбросить сеточные фильтры на панели инструментов поиска, не закрывая диалоговое окно расширенного поиска.

Вы можете увидеть соответствующее демо в прямом эфире здесь.

ОБНОВЛЕНО: Еще одна демонстрация использует toggleToolbar, чтобы скрыть панель инструментов фильтра, если расширенный диалог будет открыт, и показать его, если расширенный диалог будет закрыт.

ОБНОВЛЕНО 2: В другом ответе вы найдете, как удалить последнюю строку диалогового окна поиска (с "Инв №"), которая не является частью правил поиска из postData.filters, Новая версия демо здесь.

Другие вопросы по тегам