jqGrid filterToolbar

#jqgrid

#jqgrid

Вопрос:

Я застрял на этой проблеме в течение последних 2 дней. Много гуглил, но не смог найти точного ответа.

Ниже приводится определение jqGrid

 $("#tblresults").jqGrid({
            datastr: data,
            datatype: 'jsonstring',
            height: 230,
            colNames: colNames,
            colModel: colModel,
            rowNum: -1,
            viewrecords: true,
            loadComplete: function() {
                ChangeSize('#tblresults', 70);
            }
        });
  

И это определение фильтра

     $("#tblresults").filterToolbar({ searchOnEnter: true, stringResult: true, defaultSearch: "cn", groupOp: "AND" });
  

Я получаю данные с помощью простого вызова getJSON. Но когда я пытаюсь использовать фильтр, ничего не работает.
Я отладил код и обнаружил, что jqgrid внутренне вызывает reloadgrid, что приводит к исчезновению данных.

Кто-нибудь может сказать мне, как мы можем выполнить фильтрацию в jqgrid полностью на клиенте. Я использую версию v3.8, и я узнал, что в jqgrid v3.7 реализована эта логика фильтрации на стороне клиента.

Заранее спасибо

Ответ №1:

У вас есть данные, прежде всего, вы не должны использовать -1 в качестве значения rowNum . Вместо этого используйте любое надежное значение, например rowNum:1000 . Еще лучше было бы использовать локальную подкачку данных. В этом случае вам следует просто задать, например rowNum:10, rowList:[5,10,20,100] .

Если вы получаете входные параметры colNames , colModel и data параметры jqGrid с сервера за вызов ajax, вам следует дополнительно рассмотреть возможность использования data параметра вместо datastr . В этом случае datatype значение должно быть изменено с 'jsonstring' на 'local' .

Некоторые другие распространенные параметры, такие как gridview:true и height:'100%' , также могут быть полезны для вас. Первый ( gridview:true ) просто улучшает производительность без каких-либо недостатков, а второй ( height:'100%' ) будет следовать выбору оптимальной высоты сетки без вертикальной полосы прокрутки. Это можно хорошо сочетать с локальной подкачкой данных (параметры, подобные rowNum:10, rowList:[5,10,20,100] ).

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

1. Я где-то читал, что rowNum =-1 будет отображать все записи в сетке, и это мое требование. Количество записей в любом случае не превысит 200, поэтому вертикальная полоса прокрутки подойдет. Я бы попробовал изменить тип данных и параметры данных и посмотреть, сработает ли это. Но пока я использовал старый подход фильтрации записей на сервере.

2. @Nilesh: Значение rowNum=-1 может быть в порядке, если вы отправите значение на сервер. Значение использовалось в старых версиях jqGrid (<3.7), примерно равное 200 как количество строк. Действительно ли необходимо заполнить часть окна браузера, прежде чем пользователь будет прокручивать окно? Если вы будете использовать его rowNum:10 вместо rowNum:200 , сетка будет готова в 20 раз быстрее. Может ли пользователь читать и анализировать 200 строк сетки? Вероятно, сортировка и фильтрация (см. фильтрация на панели инструментов ) будут лучше для пользователя, и можно будет использовать подкачку.

Ответ №2:

добавьте эти параметры, и поиск на панели инструментов должен сработать. я тоже сталкивался с подобной проблемой при запуске с jqgrid.

 search:true,
loadonce:true,