1

行の追加と編集に inlineNav 編集オプションを使用しています。データはデータベースに正しく更新されていますが、保存が成功した後、サーバーにポストバックせずにグリッドを更新する方法が見つかりません。

私が見つけたすべての質問と回答は、 $.('grid').trigger('reloadGrid'); を実行することを推奨しています。

ただし、サーバーからの応答に必要なデータが既に含まれている場合、それは不要に思えます。これは主に、新しいレコードを追加し、ID 値が jqg1 として表示される場合の問題です。

jqGrid 4.4.4でASP.NET MVC4を使用しています。

これが私の見解です

  $(document).ready(function () {
    var emptyMsgDiv = $('<div>No school codes to display.</div>');
    var grid = $('#tblSchools');

    grid.jqGrid({
        datatype: 'json',
        viewrecords: true,
        url: '@Url.Action("SchoolsGridData")',
        editurl: '@Url.Action("EditSchoolsGridData")',
        colNames: ['School ID', 'Name', 'SACE Number', 'School Code', 'LEA Code', 'DFEE Code', 'Active'],
        colModel: [
                    { name: 'SchoolId', index: 'SchoolId', width: 80, key: true },
                    { name: 'Name', index: 'Name', width: 190, editable: true },
                    { name: 'SaceSchoolNumber', index: 'SaceSchoolNumber', width: 105, editable: true, sortable: false },
                    { name: 'Code', index: 'Code', width: 105, editable: true, sortable: false },
                    { name: 'LeaCode', index: 'LeaCode', width: 80, editable: true, sortable: false },
                    { name: 'DfeeCode', index: 'DfeeCode', width: 80, editable: true, sortable: false },
                    { name: 'Active', index: 'Active', width: 80, editable: true, sortable: false }
        ],
        shrinkToFit: true,
        height: "100%",
        caption: 'School list',
        rowNum: 10,
        rowList: [10, 15, 20],
        emptyrecords: 'No school codes to display.',
        pager: '#schoolsPager',
        loadComplete: function () {
            var count = grid.getGridParam();
            var ts = grid[0];
            if (ts.p.reccount === 0) {
                grid.hide();
                emptyMsgDiv.show();
            } else {
                grid.show();
                emptyMsgDiv.hide();
            }
        }
    }).trigger('reloadGrid', [{ page: 1 }]);

    emptyMsgDiv.insertAfter(grid.parent());

    grid.jqGrid('navGrid', "#schoolsPager", { edit: false, add: false, del: true });
    grid.jqGrid('inlineNav', '#schoolsPager', {
        addParams: {
            position: "last",
            addRowParams: {
                "keys": true,
                "aftersavefunc": function (rowid, response) {
                    alert('row: ' + rowid + ', response: ' + $.param(response));
                }
            }
        },
        editParams: {
            "aftersavefunc": function (rowid, response) {
                alert('row: '+rowid+', response: '+response);
            }
        }
    });

  });
</script>
<h3>Maintain Schools</h3>

<table id="tblSchools"></table>
<div id="schoolsPager" class="gridPager"></div>

そして私のコントローラー

public JsonResult EditSchoolsGridData(string oper, string SchoolId, string Name, string SaceSchoolNumber, string Code, string LeaCode, string DfeeCode, string Active)
{
  [Update Logic]

  return SchoolsGridData(string.Empty, "asc", 1, 10);
}

[HttpGet]
public JsonResult SchoolsGridData(string sidx, string sord, int? page, int? rows)
{
  [Get data logic]
}

aftersavefunc に応答 json が表示されているのがわかりますが、それをグリッドにバインドする方法が見つかりません。

私がやろうとしていることは可能ですか?

4

1 に答える 1

0

グリッドをリロードしてデータをグリッドに設定する addRowData メソッドを使用できます

jQuery("#tblSchools").jqGrid('addRowData', response.SchoolId, response, "first");

詳細については、jqgrid メソッド wiki を参照してください。

于 2013-03-08T02:30:38.170 に答える