jqGrid subGrid перестает открываться после прокрутки - PullRequest
2 голосов
/ 19 октября 2011

У меня есть сетка (версия 4.1.1) с использованием подсетки.Я использую loadonce: true и scroll: 1. Когда сетка загружается первой, я могу без проблем открывать подсетки, с до . Я прокручиваю основную сетку до точки, где она загружает больше данных.После этого никакая подсетка не будет открываться или закрываться.Если я нажимаю на значок «плюс», я вижу «Загрузка ...», но ничего не происходит.Я даже не могу закрыть подсетки, которые были ранее открыты.

Вот мое определение сетки:

$("#grid_sites").jqGrid({
url:'getgridxmlsites.php',
      postData: {detailid: function() {return $('#hdnDetailId').val(); }},
datatype: 'xml',
height: 260,
width: 832,
shrinkToFit: false,
caption:'',
colNames :['studydetailid', 'Site', 'Name', 'Status', 'Location'],
colModel :[
   {name:'detailid',     index:'detailid', width:0, hidden: true },
   {name:'sitenumber',   index:'sitenumber',    width:60,   align:'right'},
   {name:'name',         index:'name',      width:230},
   {name:'status',       index:'status',        width:110,  align:'center'},
         {name:'location',       index:'location',  width:74}
       ],
 pager:'pager_sites',
 scroll: 1,
 viewrecords:true,
 sortable:true,
 sortname: 'sitenumber',
 autowidth: true,
 pgbuttons: false,
 loadonce: true,
//      gridview: true, // Cannot be used when using subGrid.
 onSelectRow: function(id){ gridRowSelect(id) },
 subGrid: true,
 subGridUrl: 'getgridxmldatabysite.php',
 subgridtype: 'xml',
 subGridModel: [{
        name: ['Owner', 'Phone', 'Status'],
        width: [120, 100, 100],
        align: ['left', 'left', 'left'],
        params: ['detailid']
    }],
  subGridOptions: { reloadOnExpand : false }
});

Я надеюсь, что вы можете помочь.

Ответы [ 3 ]

3 голосов
/ 27 ноября 2011

У меня похожая проблема. Похоже, что функция addSubGrid в jqgrid добавляет событие click для переключения подсетки в каждую строку таблицы (а не только в те, которые только что были загружены).

Это приводило к тому, что новые строки работали нормально, но первый набор быстро расширялся, а затем сворачивался (два обработчика щелчка). Когда загружался другой набор данных, первый набор строк работал нормально (хотя они расширялись, сворачивались и снова расширялись), но второй набор больше не работал.

Я потерял некоторую комбинацию addJSON и addSubGrid, когда попытался выяснить, не упустил ли я некоторые метаданные строки в JSON. Сейчас я только что изменил строку:

$(ts.rows[i].cells[pos]).bind('click', function(e) {

до:

$(ts.rows[i].cells[pos]).unbind('click');
$(ts.rows[i].cells[pos]).bind('click', function(e) {

и все, кажется, работает как ожидалось. Это для версии 4.2.0 jqGrid. Я все еще не уверен, является ли это ошибкой, проблемой конфигурации или проблемой данных, но по крайней мере я снова работаю.

0 голосов
/ 22 июня 2014

В вашей конфигурации вы не устанавливаете rowNum.Поэтому я считаю, что jqgrid будет использовать rowNum по умолчанию, равный 20. Это вызывает проблему с прокруткой из-за проблемы привязки кликов, упомянутой Робертом Симмонсом.

Еще один способ исправить эту проблему без изменения кода jqgrid -установите rowNum в -1.Это просто получит все строки, что должно быть хорошо, потому что вы используете локальные данные.Однако это исправление может не работать в предыдущих версиях до 4.6.0.(См. Как показать все строки в jqGrid? для получения дополнительной информации о настройке rowNum в -1).В версиях до 4.6.0 я думаю, что основным решением было просто установить rowNum на большое число.

0 голосов
/ 19 октября 2011

Обычно "Loading..." означает ошибку при обработке ответа сервера. Я рекомендую вам использовать jquery.jqGrid.src.js вместо jquery.jqGrid.min.js и запустить свою страницу в отладчике. Например, вы можете использовать Инструменты разработчика Internet Explorer. Для этого вам нужно нажать F12 , чтобы запустить Инструменты разработчика, затем выбрать «Скрипт» и нажать кнопку «Начать отладку». Либо страница будет остановлена ​​по ошибке, либо вы увидите дополнительную информацию в «консоли» на правой панели.

Лично я не пользуюсь опцией scroll: 1 из-за сложности обработки данных и различных известных ошибок или проблем. Мне кажется, что вы используете несовместимую комбинацию параметров. Я бы порекомендовал вам удалить либо loadonce: true, либо scroll: 1 параметр.

...