#jquery #jqgrid #pagination
#jquery #jqgrid #разбивка на страницы
Вопрос:
Я пытаюсь получить все строки разбитых на страницы записей (записей, присутствующих на всех страницах). Однако я получаю только записи на первой странице. Как я могу получить все записи в таблице? Есть ли способ добиться этого только с помощью javascript? Я использую фильтры jquery для получения отфильтрованных записей в jqgrid, поэтому мне нужно распределить отфильтрованные данные по нескольким страницам.
var x=$("#list").getGridParam("reccount");//get only current page records count.
var gridData = $("#list").jqGrid('getRowData');// get only current page records
$("#list").jqGrid('getGridParam','data');//obtain all records but not filtered records in all pages
Вот мой код:
$(document).ready(function() {
var grid = $("#list"),
mydata = [
{id:"1",invdate:"2007-10-01",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
{id:"2",invdate:"2007-10- 02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
{id:"3",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
{id:"4",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
{id:"5",invdate:"2007-10-05",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
{id:"6",invdate:"2007-09-06",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
{id:"7",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
{id:"8",invdate:"2007-10-03",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
{id:"9",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
{id:"10",invdate:"2007-10-01",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
{id:"11",invdate:"2007-10-02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
{id:"12",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
{id:"13",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
{id:"14",invdate:"2007-10-05",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
{id:"15",invdate:"2007-09-06",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
{id:"16",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
{id:"17",invdate:"2007-10-03",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
{id:"18",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"}
];
grid.jqGrid({
datatype: "local",
data: mydata,
colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
colModel:[
{name:'id',index:'id', key: true, width:70, sorttype:"int"},
{name:'invdate',index:'invdate', width:90, sorttype:"date"},
{name:'name',index:'name', width:100},
{name:'amount',index:'amount', width:80, align:"right",sorttype:"float"},
{name:'tax',index:'tax', width:80, align:"right",sorttype:"float"},
{name:'total',index:'total', width:80,align:"right",sorttype:"float"},
{name:'note',index:'note', width:150, sortable:false}
],
search:true,
pager:'#pager',
jsonReader: {cell:""},
rowNum: 8,
rowList: [5, 10, 20, 50],
sortname: 'id',
sortorder: 'asc',
viewrecords: true,
height: "100%",
caption: "Multiple search with local data"
});
grid.jqGrid('navGrid','#pager',{add:false,edit:false,del:false,search:true,refresh:true},
{},{},{},{multipleSearch:true, multipleGroup:true, showQuery: true});
});
Комментарии:
1. Пожалуйста, отправьте код для того, как вы применяете фильтр в jqgrid..
2. Привет, ягнеш .. пожалуйста, ознакомьтесь с приведенной ниже ссылкой для применения фильтров.. jsbin.com/xeyeroha/5/edit …… в примере выберите опцию «Тест» в окне выбора и нажмите «Применить фильтр».. в результате будет выдано 2 страницы записей….. Пожалуйста, подскажите, как получить все строки на обеих страницах… Спасибо…,
3. Смотрите мой ответ ниже. возможно, это поможет вам.
4. включить
loadComplete
при инициализации jqgrid. Если вы уже используете его, включите этоthis.p.lastSelected = lastSelected;
в него.
Ответ №1:
Вы можете использовать loadComplete(){}
обратный вызов jqGrid:
loadComplete: function(gridData){
console.log(gridData); // will print all the records available in the grid.
}
Комментарии:
1. Спасибо, Джай. Вы указали мне правильное направление. Я ответил на этот вопрос выше.
Ответ №2:
Насколько я понимаю, вам нужны данные всех строк сетки без разбивки на страницы
Не существует какой-либо функции, доступной для прямого получения данных фильтра.Внутри JqGrid
используется $.jgrid.из для фильтрации локальных данных.
Чтобы получить данные всех строк jqGrid после применения фильтра, используется функция ниже :
var oldFrom = $.jgrid.from,lastSelected;
$.jgrid.from = function (source, initalQuery)
{
var result = oldFrom.call(this, source, initalQuery),
old_select = result.select;
result.select = function (f) {
lastSelected = old_select.call(this, f);
return lastSelected;
};
return resu<
};
lastSelected
вернет массив данных всех строк после применения фильтра к элементам сетки, которые являются результатами последней операции сортировки или фильтрации.
$.jgrid.from
является глобальным, данные не подключены к сетке. Если у вас больше одной сетки на странице, это будет неудобно. Можно исправить небольшой недостаток следующей строкой в коде loadComplate
каждой сетки:
loadComplete: function () {
this.p.lastSelected = lastSelected;
}
С помощью приведенного выше кода мы добавляем новый параметр jqGrid lastSelected
, который будет иметь аналогичный параметр data, но будет содержать только последние отфильтрованные данные.
Вы можете получить данные фильтра с помощью приведенного ниже кода :
var filteredData = $grid.jqGrid('getGridParam', 'lastSelected');
Комментарии:
1. Привет, Ягнеш.. Спасибо за ответ .. очень признателен.. Но можете ли вы подсказать, как включить ваш код в «loadcomplete», потому что я уже использую «loadcomplete» один раз в своем коде…
2. объедините мой код с вашим кодом .. добавьте мою строку, присутствующую в
loadcomplete
, в вашу функцию.3. Спасибо, ягнеш .. я получаю все отфильтрованные записи, но единственная проблема заключается в том, что при нажатии 2-го раза на applyfilters () он возвращает объекты данных… но при первом щелчке он возвращает ‘null’… также появится картинка с тегом «загрузка …». можете ли вы предложить, как преодолеть эту проблему?
4. Обновите свой код в
jsbin
и предоставьте обновленную ссылку. Я не вижу никаких проблем в своем коде.