jqGrid четкие критерии поиска

В настоящее время у меня есть сетка с включенным поиском. Когда я запускаю поиск, все работает нормально, и я могу вернуть хорошие данные обратно в таблицу. Я вижу, что параметр "_search" в URL установлен на "true" и все хорошо.

Тем не менее, когда поиск закончен и данные больше не актуальны, я бы хотел перезагрузить сетку, чтобы отобразить предыдущие данные, которые были там (данные, отображаемые при начальной загрузке страницы). Я сделал функцию для вызова метода "trigger("reloadGrid")", но он просто отправляет те же данные, когда "_search" все еще имеет значение "true".

Есть ли способ очистить данные поискового запроса и просто перезагрузить исходные данные, показанные при загрузке страницы, или хотя бы вернуть значение "_search" в "false", чтобы я мог проверить это? В настоящее время единственный способ отобразить исходные данные - перезагрузить страницу.

2 ответа

Если вы используете поиск jqGrid, будут установлены следующие две вещи

  1. search Параметр jqGrid будет установлен в true,
  2. postData Параметр jqGrid будет изменен. Значение postData Параметр - это объект, который имеет некоторые свойства. В случае разового поиска свойств searchField, searchString а также searchOper будет установлен. В случае расширенного поиска только недвижимость filters из postData Параметр будет установлен. (Недвижимость _search будет также установлен, но из другого компонента jqGrid, так что это не важно для сброса поиска.)

Таким образом, чтобы сбросить поиск, вы можете определить следующий обработчик события для вашей кнопки "Сбросить поиск":

$("#resetSearch").click(function() {
    var grid = $("#list");
    grid.jqGrid('setGridParam',{search:false});

    var postData = grid.jqGrid('getGridParam','postData');
    $.extend(postData,{filters:""});
    // for singe search you should replace the line with
    // $.extend(postData,{searchField:"",searchString:"",searchOper:""});

    grid.trigger("reloadGrid",[{page:1}]);
});

Вы можете увидеть все это вживую в следующей демонстрации. В демоверсии сначала нужно нажать кнопку "Поиск" на панели навигации и установить фильтр поиска. Затем вы можете нажать на кнопку "Сбросить поиск" и сбросить ее.

Чтобы очистить окна фильтра (как текст, так и выделение), было следующее дополнение (целая функция):

function filtReset() {

    $("#list").jqGrid('setGridParam',{search:false});

    var postData = $("#list").jqGrid('getGridParam','postData');

    $.extend(postData, { filters: "" });

    for (k in postData) {
        if (k == "_search")
            postData._search = false;
        else if ($.inArray(k, ["nd", "sidx", "rows", "sord", "page", "filters"]) < 0) {
            try {
                delete postData[k];
            } catch (e) { }

            $("#gs_" + $.jgrid.jqID(k), $("#list").get(0).grid.hDiv).val("");

        }
    }
    $("#list").trigger("reloadGrid", [{ page: 1}]);
    // for singe search you should replace the line with
    // $.extend(postData,{searchField:"",searchString:"",searchOper:""});
}
Другие вопросы по тегам