无法用新值重新加载JGrid

Unable to reload the JGrid with the new value

本文关键字:加载 JGrid 新加载 新值重      更新时间:2023-09-26

我使用JQuery和JGrid与java。我有一个网格

     <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>

在第二个网格中,我将第一个网格中选择的id值作为url传递。每次我从第一个网格中选择一行,点击"显示详细信息"按钮后,函数abc()将被执行,应该传递id,并在第二个网格中显示相应的行(id信息)。

我能够获得所选行的id,并且能够重新加载第二个网格,但是与第二个网格相关的查询正在获取第一次选择的id。但是我需要当前选择的id。

请帮…

abc函数的代码中至少可以看到两个重要的问题。

第一个是setGridParam JQuery("#table2").jqGrid({...});之前的使用,其中创建网格。不能在<table>上使用setGridParam。像JQuery("#table2").jqGrid({...});这样的调用转换了相对复杂结构中的空<table id="table2"></table>元素,这些元素将用于显示网格。因此,您应该首先创建网格(将空<table>转换为网格),然后才能使用setGridParam.trigger("reloadGrid")来刷新网格内容。

第二个问题是JQuery("#table2").jqGrid({...});在函数abc内部的使用,您多次调用。如前所述,调用JQuery("#table2").jqGrid({...});将空的<table>转换为网格。因此,只能调用一次。对于第二次加载网格,您应该使用setGridParam.trigger("reloadGrid")来刷新网格内容。

UPDATED:如果你想实现master/details场景,你可以这样做:

// 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回调(参见代码示例的答案)。在主网格的beforeRefresh回调中,您可以为详细网格调用clearGridData。所以如果你要刷新主网格,细节网格将是空的,直到主网格中的行被选中。