Как показать все строки в jqGrid?
jqGrid предоставляет свойство rowNum
где можно задать количество строк для отображения на каждой странице. Как настроить сетку для отображения всех строк?
прямо сейчас я просто устанавливаю rowNum
к чему-то действительно высокому, как <%= int.MaxValue %>
но мне интересно, есть ли лучший способ.
14 ответов
В последней версии jqGrid вы можете установить rowNum в -1 чтобы указать сетке всегда отображать все строки:
rowNum: -1
см. последнюю документацию jqGrid здесь.
в частности:
устанавливает, сколько записей мы хотим посмотреть в сетке. Этот параметр передается url-адресу для использования серверной программой, извлекающей данные. Обратите внимание, что если вы установите этот параметр в 10 (т. е. получить 10 records) и ваш сервер возвращает 15, тогда будут загружены только 10 записей. Установите для этого параметра значение -1 (unlimited), чтобы отключить эту проверку.
обновление
к сожалению, это поведение было нарушено в jqGrid 3.6.3. Согласно это сообщение от Тони:
Да, это верно. Причина-новый введенный свиток: 1. В будущем мы исправим это поведение.
так разработчики jqGrid знают об этой проблеме и, по-видимому, планируют исправить ее в будущем выпуске. К сожалению, это сообщение было больше года назад...
в это время, все, что я могу посоветовать, это rowNum
для очень большого числа, чтобы имитировать поведение -1
.
вы также можете попробовать решение whatispunk ниже использования rowNum: ''
. Тем не менее, я попробовал это на сетке, содержащей локальные данные (loadonce: true
). При попытке отсортировать строки все локальные данные грида исчезнут. Таким образом, это решение, похоже, не работает для сеток с локальными данными, если этот дефект не был исправлен в более поздней версии jqGrid (я тестировал его на jqGrid 3.8.2). Если у вас есть отзывы, пожалуйста, напишите комментарий ниже!
Обновление-16 Апреля 2014
согласно команде jqGrid теперь это исправлено:
я добавил поддержку для установки различных значений отображения на пейджере установите флажок включая -1 для всех.
у меня не было возможности проверить, чтобы подтвердить исправление. Предположительно, это изменение будет в следующем выпуске после jqGrid 4.6.0.
jqgrid (3.5 в любом случае), похоже, не имеет элегантного встроенного способа сделать это. Лучшее, что я нашел до сих пор, это добавить что-то вроде следующего в ваши параметры сетки:
rowList:[10,20,30,100000000],
loadComplete: function() {
$("option[value=100000000]").text('All');
},
где 100000000-это произвольно большее число, чем максимальное число строк, которые вы когда-либо вернете, и строка[value=], поэтому ваш пользовательский интерфейс выглядит немного лучше. Дженки, но работает на меня.
Если вы не хотите использовать пейджинг вообще, измените код на стороне сервера, чтобы просто вернуть все строки. не используйте параметр rows вообще.
Если вы хотите иметь список строк, но также есть возможность показать все, то сделайте что-то вроде этого в свойствах сетки
jQuery("#statement_mods").jqGrid({
rowList:['ALL',30,50,100,200]
});
а затем в коде сервера убедитесь, что вы игнорируете параметр rows, если GET ['rows']= 'ALL'
это работает:
// Step1 - defines the rows
jqGridOptions.rowList =[10, 50, 100, 500, 'All'];
...
...
// Step2 - Change the 'All' to a meaningful value
loadComplete: function (data) {
$(".ui-pg-selbox option[value='All']").val(1000);
}
Если вы установили разбиение на страницы на панели навигации, вы также можете получить доступ к общему количеству строк, написанных в правой нижней части сетки, а затем добавить к сгенерированной опции списка строк.
сделать что-то вроде :
// Get the total number of rows and delete space between numbers (Split the content of the div depending of the language (for me french)
var val=jQuery("#pager_right div").text().split('sur')[jQuery("#pager_right div").text().split('sur').length-1].split(' ').join('');
// And do the appending if the option isn't already added
if(!$(".ui-pg-selbox option[value='"+val+"']").length > 0)
jQuery(".ui-pg-selbox").append($('<option></option>').val(val).html(val));
Jqgrid.PagerSettings.PageSize = Max Row you want to display;
Jqgrid.ToolBarSettings.ToolBarPosition = ToolBarPosition.Hidden;
у меня это работает:
$('#bla').jqGrid({
...
'rowNum' : 0,
'loadOnce' : true,
'loadComplete': function(data) {
$(this).jqGrid('setGridParam', 'rowNum', data.total);
},
...
});
это работает с и без loadOnce
параметр имеет значение true. Обратите внимание, что вы должны установить rowNum
сначала опция 0, если вы оставите эту опцию, она по-прежнему будет по умолчанию показывать 20 записей.
Кроме того, я предполагаю, что вы возвращаете общие строки с сервера в документированном формате JSON reader.
решала это простое изменение: параметр rownum: inputDataArray.длина
где inputDataArray-это массив, который я предоставляю сетке.
вы также можете перейти в jquery.jqGrid.js и измените "rowNum: 20 "на"rowNum:Some-Really-Large-Number". При определении jqGrid не указывайте rowNum. Затем верните весь набор данных обратно в jqGrid.
даже если он все еще появляется в документе, что вы не можете установить rowNum в -1 С jqGrid 4.5.4, он снова работает (возможно, в более ранней версии).
по умолчанию сетка JQ показывает 20 строк максимум, если вы используете не используя разбиение на страницы:
// To over come with this problem ,you can just write the bold mark
(rowNum:10000,):
$("#MasterDataDefinationGrid").jqGrid({
url: 'FetchData.aspx/GetDataFromDB',
datatype: 'json',
mtype: 'POST',
height: 300,
autowidth: true,
serializeGridData: function (postData) {
return JSON.stringify(postData);
},
ajaxGridOptions: { contentType: "application/json" },
loadonce: true,
colNames: [Your column names],
colModel: [Your model],
formatter: 'actions',
pager: '#MasterDataDefinationPager', pgbuttons: false,pgtext:false,
multiselect: false,
ignoreCase: true,
**rowNum: 10000,**
loadtext: 'Loading ...',
gridview: true,
hidegrid: false,
jsonReader: {
page: function (obj) { return 1; },
total: function (obj) { return 1; },
records: function (obj) { return obj.d.length; },
root: function (obj) { return obj.d; },
repeatitems: false,
id: "0"
},
caption: 'Data'
});
loadComplete: function (data) {
//set our "ALL" select option to the actual number of found records
$(".ui-pg-selbox option[value='ALL']").val(data.records);
}
это изменяет параметр " все " на фактическое количество записей в наборе данных.