2015-08-26 2 views
0

У меня есть jqgrid, который я вызываю каждый раз, когда выпадающее меню изменяется. Но проблема в том, что jqGrid показывает только данные, загруженные в первый раз, после этого Когда я вызываю одну и ту же функцию с новым набором данных {array of objects}, он не обновляется сам. Ниже приведен код:jqgrid не обновляет локальные данные

function loadGrid(colModel, data1) { 
    var grid = $("#gridJQ"); 
    grid.jqGrid({ 
     datatype: "local", 
     viewrecords: true, 
     data: data1, 
     height: "auto", 
     rowNum: 5, 
     autowidth: false, // set 'true' here 
     rownumbers: true, // show row numbers 
     rownumWidth: 25, 
     colModel: colModel, 
     pager: "#jqGridPager", 
     height: "auto", 
     caption: "Load jqGrid through Javascript Array", 
    }).trigger("reloadGrid"); } 

Я проверил значение модели Col и data1, она меняется каждый раз, но сетка не отражает изменения.

ответ

1

Вы писали: «Я призываю каждый раз при каждом изменении раскрывающегося списка». Я думаю, что существует проблема общего понимания, что делает код. Сначала вы разместили пустую таблицу <table id="gridJQ"></table> на странице HTML. Первый вызов loadGridпреобразует пустую таблицу в относительно сложную структуру погружений и таблиц. Вы можете проверить сетку с помощью инструментов разработчика, чтобы увидеть, как выглядит сетка. После первоначального создания сетки можно сортировать данные, изменять текущую страницу, изменять ширину столбцов и т. Д. Все действия в основном меняют корпус сетки, а не внешние части с заголовками столбцов.

Таким образом, у вас есть по крайней мере два основных варианта (варианты), чтобы исправить эту проблему:

  1. Вы должны уничтожить jqGrid и воссоздавать его. Вы должны включить $("#gridJQ").jqGrid("GridUnload");до линия var grid = $("#gridJQ"); в loadGrid.
  2. Вы можете продолжать использовать функцию loadGrid только для первоначального создания сетки. Если вам необходимо перезагрузить данные сетки с обновленной data1, то вы должны вызвать clearGridData Fisrt, а затем использовать setGridParam, чтобы установить новое значение data параметра и, наконец, использовать $("#gridJQ").trigger("reloadGrid") который пополнить тело (без изменения внешних частей сетки) сетки на основе новых data. Вы можете использовать дополнительную опцию current: truereloadGrid, которая позволит слишком удерживать текущий выбор в сетке. См. the answer для получения дополнительной информации о возможностях reloadGrid.

Первый способ предоставит вам самый простой способ исправить проблему. Второй способ позволяет создать наиболее удобную сетку с точки зрения пользователей.

+0

спасибо за ваше обновление. Я следовал второму подходу, поскольку он был бы эффективным, а не создавал бы сетку каждый раз. Я написал код ниже в моей функции reloadGrid: grid.jqGrid ("clearGridData", true); grid.jqGrid ('setGridParam', {data: data}). Trigger ("reloadGrid", [{current: true}]); Но выбор не остается, если я выбираю вторую строку перед перезагрузкой Grid, он очищает весь выбор, также возможно быть на одной странице, а также до обновления, в этом случае, какой атрибут будет указан для значения страницы – Bhupendra

+0

@Bhupendra : Добро пожаловать! Вы должны проверить правильность заполнения сетки. Особенно важно знать, правильно ли вы заполняете свойство 'id' каждого элемента' data', или используете ли вы ключ ': true' в столбце сетки, который содержит уникальные данные. Вы должны написать, какую вилку jqGrid и в какой версии вы используете. Вы должны удалить вторую «height:» auto »,' из параметров и добавить дополнительные опции «gridview: true, autoencode: true». Вам не нужно использовать '.trigger (« reloadGrid »)' in 'loadGrid', только в вашей функции' reloadGrid'. – Oleg

+0

спасибо за ответ, когда я выбираю строку по умолчанию, она выбирает целую строку, мне нужно выбрать конкретную ячейку строки и щелкнуть по этой ячейке получить значение, выбор ячейки возможен? – Bhupendra

Смежные вопросы