2

我在 java 中使用 JQuery 和 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>

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

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

请帮忙.......

4

1 回答 1

1

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

第一个是使用setGridParam before JQuery("#table2").jqGrid({...}); which创建网格。你不能setGridParam<table>. 调用 like将用于显示网格的相对复杂的潜水和表格结构中的JQuery("#table2").jqGrid({...});空元素转换。<table id="table2"></table>因此,您应该首先创建网格(对网格隐蔽为空<table>),然后才能使用setGridParam.trigger("reloadGrid")刷新网格内容。

第二个问题是您多次JQuery("#table2").jqGrid({...});调用的函数内部的使用。正如我之前所描述的那样,调用将空白转换为网格。所以一个人只能打一次这样的电话。对于网格的第二次加载,您应该只使用并刷新网格内容。abcJQuery("#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回调(参见代码示例的答案)。在beforeRefresh主网格的回调中,您可以调用clearGridData细节网格。因此,如果您要刷新主网格,则在选择主网格中的行之前,详细网格将为空。

于 2013-03-05T08:29:34.123 回答