#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,