【问题标题】:Unable to reload the JGrid with the new value无法使用新值重新加载 JGrid
【发布时间】:2013-03-05 07:01:47
【问题描述】:

我在 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。

请帮忙.......

【问题讨论】:

标签: java javascript jqgrid


【解决方案1】:

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

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

第二个问题是在函数abc 中使用JQuery("#table2").jqGrid({...});,您多次调用。正如我在调用 JQuery("#table2").jqGrid({...}); 之前所描述的那样,将空的 &lt;table&gt; 转换为网格。所以一个人只能打一次这样的电话一次。对于网格的第二次加载,您应该只使用 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。因此,如果您要刷新主网格,则在选择主网格中的行之前,详细网格将为空。

【讨论】:

  • 好的...谢谢您的回复....我将在网格内使用 setGridParam。但是如何检查网格的第二次加载。
  • @vani:不客气!我不明白你想在 second 加载时做什么。如果您需要继续加载次数,您可以使用在外部范围中定义的变量。您可以在 loadComplete 回调中增加它。
  • 实际上根据第一个网格中选择的值,我必须填充第二个网格。所以在第二个网格的 url 中,我传递了第一个网格的 id。首次填充第二个网格。但是第二次,当在第一个网格中选择一条记录时,只有当我单击“重新加载网格”时,第二个网格才会刷新。因此,一旦在第一个网格中选择了一条记录,我想以编程方式使用在第一个网格中选择的当前值加载第二个网格。
  • @vani:该场景与您提出的原始问题相去甚远。在您描述的场景中,我没有看到任何问题。请参阅我的回答的已更新部分。
猜你喜欢
  • 2014-03-18
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多