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

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

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

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

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

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

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

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

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

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

Обновление:

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

1 Ответ

2 голосов
/ 12 марта 2011

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

В текущей версии 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. Новая версия демо-версии здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...