2013-03-05 7 views
2

Я использую JQuery и JGrid с java. У меня есть сеткаНевозможно перезагрузить JGrid с новым значением

 <script> 
    jQuery("#table1").jqGrid({ 
    .............. 
    ............ 
    }); 

У меня есть другая сетка

 function abc { 
     var id = firstgridid; 
     if(number>0) { 
     // working but with the old value 
     $("#table2").jqGrid('setGridParam', { url: 'JGridA?action=abc&hidden='+id,page:1}).trigger("reloadGrid"); 

     JQuery("#table2").jqGrid({ 
     url:'JGridServlet?action=comm&hidden='+id, 
     ............. 
     }); 
     } 
     </script> 

Во второй сетке, я передаю значение идентификатора, выбранный в первой сетке в качестве URL. Каждый раз, когда я выбираю строку из первой сетки, после того, как я нажму кнопку «показать подробности», функция abc() выполнит, идентификатор должен быть передан, а соответствующие строки (информация об идентификаторе) должны отображаться в вторая сетка.

Я могу получить идентификатор выбранной строки и возможность перезагрузить вторую сетку, но запрос, связанный со второй сеткой, принимает идентификатор, который сначала выбран. Но мне нужен идентификатор, который в настоящее время выбран.

Пожалуйста, помогите .......

+0

http://stackoverflow.com/questions/9014922/jqgrid-reload-doesnt-work http://stackoverflow.com/questions/2901587/jquery-jqgrid-trigger-reloadgrid – 2013-03-05 07:29:20

ответ

1

Можно видеть, по крайней мере, две важные проблемы в коде abc функции.

Первый из них является использование setGridParamперед темJQuery("#table2").jqGrid({...}); какой создает сетки. Вы не можете использовать setGridParam на <table>. Вызов типа JQuery("#table2").jqGrid({...}); преобразует пустой элемент <table id="table2"></table> в относительно сложную структуру погружений и таблиц, которые будут использоваться для отображения сетки. Итак, вы должны сначала создать сетку (скрытый пустой <table> до сетки), и только после этого вы можете использовать setGridParam или .trigger("reloadGrid") для обновления содержимого сетки.

Второй проблемой является использование JQuery("#table2").jqGrid({...}); внутри функции abc которую вы называете несколько раз. Как я описал до звонка JQuery("#table2").jqGrid({...}); скрывает пустые <table> к сетке. Поэтому можно позвонить по телефону только один раз. Для второй загрузки сетки вы должны просто использовать setGridParam и .trigger("reloadGrid") для обновления содержимого сетки.

ОБНОВЛЕНО: Если вы хотите реализовать мастер/детали сценария вы можете сделать следующее:

// create master grid 
$("#table1").jqGrid({ 
    datatype: "json", 
    url: "masterGridUrl", 
    onSelectRow: function (rowid, state) { 
     if (state) { // if not the same row was previously selected 
      // refresh detail grid 
      $("#table2").jqGrid("setGridParam", { datatype: "json"}) 
       .trigger("reloadGrid", [{page: 1}]); 
     } 
    }, 
    ... // another options 
}); 

// create details grid without filling the data initially 
$("#table2").jqGrid({ 
    datatype: "json", // we use "local" instead of "json" to have to request to the server 
    url: "JGridA", 
    postData: { 
     action: "abc", 
     hidden: function() { 
      // id of currently selected row 
      return $("#table1").jqGrid("getGridParam", "selrow"); 
     } 
    }, 
    ... // other options 
}); 

Это создаст мастер сетки «# table1» и пустой деталь сетки «# table2». После выбора строки в главной сетке тело детальной сетки будет перезагружено. Детальная сетка отправляет на сервер два дополнительных параметра: один статический параметр action=abc и еще один параметр hidden, значение которого является значением rowid главной сетки.

Если вы используете navGrid в главной сетке, вы можете добавить обратный вызов beforeRefresh (см. Пример кода the answer). В обратном вызове beforeRefresh вы можете вызвать clearGridData для сетки деталей. Поэтому, если вы обновите основную сетку, сетка деталей будет пустой, пока не будет выбрана строка в главной сетке.

+0

ok ...спасибо за ответ .... Я буду использовать setGridParam внутри сетки. Но как проверить вторую загрузку сетки. – vani

+0

@vani: Добро пожаловать! Я не понимаю, что вы хотите делать при загрузке * second *. Если вам нужно указать количество загрузок, вы можете просто использовать переменную, определенную во внешней области. Вы можете увеличить его в обратном вызове 'loadComplete'. – Oleg

+0

Фактически, исходя из значения, выбранного в первой сетке, мне нужно заполнить вторую сетку. Таким образом, в URL второй сетки я передаю идентификатор первой сетки. Вторая сетка заселена в первый раз. Но во второй раз, когда запись выбрана в первой сетке, вторая сетка обновляется только тогда, когда я нажимаю на «перезагрузить сетку». Поэтому, как только запись выбрана в первой сетке, я хочу программно загрузить вторую сетку с текущим значением, выбранным в первой сетке. – vani

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