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>

2番目のグリッドでは、最初のグリッドで選択されたIDの値をURLとして渡します。最初のグリッドから行を選択するたびに、[詳細を表示]ボタンをクリックすると、関数abc()が実行され、IDが渡され、対応する行(ID情報)が2番目のグリッドに表示されます。

選択した行のIDを取得し、2番目のグリッドをリロードできますが、2番目のグリッドに関連するクエリは最初に選択されたIDを取得しています。しかし、現在選択されているIDが必要です。

助けてください.......

4

1 に答える 1

1

関数のコードには、少なくとも2つの重要な問題がありabcます。

1つ目は、グリッドを作成するsetGridParam 前の使用法です。 では使用できません。likeの呼び出しは、グリッドを表示するために使用されるダイブとテーブルの比較的複雑な構造で空の要素を変換します。したがって、最初にグリッドを作成し(グリッドに対して秘密を空にする)、その後でのみ、またはグリッドコンテンツを更新することができます。JQuery("#table2").jqGrid({...});setGridParam<table>JQuery("#table2").jqGrid({...});<table id="table2"></table><table>setGridParam.trigger("reloadGrid")

2番目の問題は、複数回呼び出すJQuery("#table2").jqGrid({...});関数内の使用法です。前に説明したように、呼び出しはグリッドに空になります。したがって、そのような呼び出しを行うことができるのは1回だけです。グリッドの2回目のロードでは、とを使用してグリッドコンテンツを更新する必要があります。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」が作成されます。マスターグリッドで行を選択すると、詳細グリッドの本体が再ロードされます。詳細グリッドは、2つの追加パラメーターをサーバーに送信します。1つは静的パラメーターaction=abcで、もう1つhiddenはマスターグリッドのROWIDであるパラメーターです。

navGridマスターグリッドで使用する場合は、beforeRefreshコールバックを追加できます(コード例の回答を参照してください)。マスターグリッドのbeforeRefreshコールバックでclearGridData、詳細グリッドを呼び出すことができます。したがって、マスターグリッドを更新すると、マスターグリッドの行が選択されるまで、詳細グリッドは空になります。

于 2013-03-05T08:29:34.123 に答える