jqGrid subGrid перестает открываться после прокрутки

У меня есть сетка (версия 4.1.1) с использованием subGrid. Я использую 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 }
});

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


person David Davis    schedule 18.10.2011    source источник


Ответы (3)


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

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

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

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

to:

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

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

person Robert Simmons    schedule 27.11.2011
comment
Похоже, это все еще происходит в jqgrid 4.6.0. - person Asagohan; 22.06.2014

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

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

person Oleg    schedule 19.10.2011
comment
Загрузка... — это текст загрузки, который всегда появляется всякий раз, когда делается запрос к серверу. Я отключил прокрутку: 1, и она работает, но теперь мне приходится использовать пейджинг в сетке. Раньше мы всегда использовали scroll:1 на сетках без проблем, и нам очень нравится его поведение, но мы впервые используем подсетку. На данный момент, поскольку у меня жесткий график, я буду использовать пейджинг. Чуть позже попробую отладить. Спасибо. - person David Davis; 19.10.2011
comment
@David Davis: Добро пожаловать! Проблема в том, что Загрузка... будет скрыта в конце обработки ответа. Поэтому, если произойдет ошибка или исключение, загрузка... все равно будет видна. Точное место, где происходит исключение, вы можете найти во время отладки. - person Oleg; 19.10.2011

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

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

person Asagohan    schedule 22.06.2014