jqGrid поиск на стороне клиента

Я хотел бы вручную применить поиск к моему jqGrid через JavaScript. Я попробовал руководство здесь, но не могу Кажется, он полностью работает. В настройке сетки у меня есть столбец с именем «error_column», в котором я хотел бы выполнить поиск строки «Тест».

Вот что у меня есть до сих пор:

var filter = { "field": "error_column", 'oper': 'eq', "data": 'Test' };
$("Grid2").jqGrid('setGridParam', { search: true, postData: { filters: filter} })
$("Grid2").trigger('reloadGrid');

Когда я нажимаю кнопку, к которой это привязано, ничего не происходит и не вызывает ошибок.

EDIT Вот код для инициализации сетки:

jQuery("#Grid2").jqGrid({
    datatype: "local",
    height: 250,
    colNames: ['NewSubscriberID', 'Conflicting Subscriber ID', 'Error Field', 'Error Message'],
    colModel: [
        { name: 'new_subscriber_id', index: 'new_subscriber_id', width: 120},
        { name: 'conflicting_subscriber_id', index: 'conflicting_subscriber_id', width: 170},
        { name: 'error_column', index: 'error_column', width: 90, sorttype: "text", search: true},
        { name: 'error_type', index: 'error_type', width: 145}
    ],
    loadonce: true
    });

Я привязываю данные к сетке, используя локальный массив.


person bpruitt-goddard    schedule 20.12.2010    source источник
comment
Используете ли вы предварительный поиск (multipleSearch:true) или нет? Если вы используете поиск с помощью панели инструментов, важно, используете ли вы stringResult:true или нет. Было бы лучше, если бы вы включили больше кода в свой вопрос.   -  person Oleg    schedule 20.12.2010
comment
Я не использую множественный поиск, так как данные нужно искать только в одном столбце. Я обновил вопрос, включив в него код инициализации.   -  person bpruitt-goddard    schedule 21.12.2010


Ответы (1)


Вы должны реализовать поиск по одному полю немного по-другому:

var grid = jQuery("#Grid2");
var postdata = grid.jqGrid('getGridParam','postData');
jQuery.extend (postdata,
               {filters:'',
                searchField: 'error_column',
                searchOper: 'eq',
                searchString: 'Test'});
grid.jqGrid('setGridParam', { search: true, postData: postdata });
grid.trigger("reloadGrid",[{page:1}]);

Вы можете увидеть живой пример здесь.

ОБНОВЛЕНО: вы используете loadonce: true и datatype: "local" вместе. Значение loadonce: true будет игнорироваться в случае datatype: "local". Если вы получаете данные с сервера и используете datatype: "json" или datatype: "xml", то loadonce: true будет работать. Если вы хотите, чтобы поиск (фильтрация) производился не локально, а на сервере, вам следует сбросить datatype на 'json' или 'xml' как дополнительную опцию 'setGridParam'.

person Oleg    schedule 22.12.2010
comment
Чувак, это было именно то, что я искал! Большое спасибо - person Stéphane; 16.06.2011
comment
Это именно то, что я тоже искал! Спасибо! - person aknatn; 19.12.2011
comment
К вашему сведению, я изменил его для поддержки множественного поиска следующим образом: var grid = jQuery("#list27"); var postdata = grid.jqGrid('getGridParam','postData'); jQuery.extend (postdata, {filters:'{"groupOp":"AND","rules":[{"field":"field1","op":"ge","data":"search string here"},{"field":"field2","op":"ge","data":"search string here"}]}'}); grid.jqGrid('setGridParam', { search: true, postData: postdata }); grid.trigger("reloadGrid",[{page:1}]); - person aknatn; 19.12.2011
comment
@aknatn: вы можете найти здесь и Здесь показано, как построить filters как объект, а затем сериализовать его в JSON с помощью JSON.stringify. - person Oleg; 19.12.2011
comment
@ Олег, в чем именно заключается исправление (для фильтров с одним поиском VS) ..? это вызов .extend() для передачи исходных значений?? - person diegohb; 19.03.2012