无法使用新值重新加载JGrid

时间:2013-03-05 07:01:47

标签: java javascript jqgrid

我正在使用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。

请帮助.......

1 个答案:

答案 0 :(得分:1)

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

第一个是在{em>创建网格的 setGridParam之前使用JQuery("#table2").jqGrid({...}); 。您无法在setGridParam上使用<table>。像JQuery("#table2").jqGrid({...});之类的调用会在相对复杂的潜水和表格结构中转换空<table id="table2"></table>元素,这些结构将用于显示网格。所以你应该首先创建网格(隐藏空<table>到网格),然后才能使用setGridParam.trigger("reloadGrid")刷新网格内容。< / p>

第二个问题是在函数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。因此,如果要刷新主网格,则详细网格将为空,直到选择主网格中的行为止。