1

jqGridには2つの問題があります

1) rownum が 10 に設定されたテーブルに 91 のレコードがあるとします。最後のページに移動してレコード番号 91 を削除すると、グリッドが自動的にリロードされません。ReloadGrid を明示的に使用すると、データ全体がリロードされます。ネットワーク負荷を増加させるコントローラ。 これは最後のページのスクリーンショットです 今、最後のレコードを削除しています 最初のページにリダイレクトされません

2) 私のグリッドには 10 ページがあり、テキスト ボックスに最大ページより大きいページ番号を入力すると、空白のグリッドが表示されます。理想的には、何らかのメッセージが表示されるはずです。

ここでは、ページ番号 = 50 を指定しましたが、最大ページ = 1 です。

解決策はありますか?

問題をよりよく理解するための追加コード

$(document).ready(function () {
        $('#jqgCars').jqGrid({
            //url from wich data should be requested
            url: '@Url.Action("CarsListing", "Car")?Carid=' + getID(),
            //event for inline edit
            onSelectRow: function (currentSelectedRow) {
                if (currentSelectedRow && currentSelectedRow != $.lastSelectedRow) {
                    //save changes in row 
                    $('#jqgCars').jqGrid('saveRow', $.lastSelectedRow, false);
                    $.lastSelectedRow = currentSelectedRow;
                }
            },
            //type of data
            datatype: 'json',
            //url access method type
            mtype: 'POST',
            //columns names
            colNames: ['ID','Number','Name'],
            //columns model
            colModel: [
                            { name: 'ID', index: 'ID', align: 'left', editable: false },
                            { name: 'Number', index: 'Number', align: 'left', editable: true, formatter: "text", edittype: 'text', editrules: { required: true}, editoptions:{maxlength:"25"}},
                            { name: 'Name', index: 'Name', align: 'left', editable: true, formatter: "text", edittype: 'text', editrules: { required: false} , editoptions:{size:"35",maxlength:"255"}},
                          ],
            //pager for grid
            pager: $('#jqgpCars'),
            //number of rows per page
            rowNum: 2,
            //initial sorting column
            sortname: 'name',
            //initial sorting direction
            sortorder: 'asc',
            //display total records count
            viewrecords: true,
            //grid height
            height: '100%' 
        });
        $('#jqgCars').jqGrid('navGrid', '#jqgpCars', { add: true, del: true, edit: true, search: false });
        $('#jqgCars').jqGrid('hideCol', "ID");
        $('#jqgCars').setGridWidth(600 , true);
        var dialogPosition = $(this).offset();
    });

更新 -- 解決策

問題の解決策#1

$.extend($.jgrid.del, {
            afterComplete: function () {
                var p = $('#jqgCars')[0].p;
                var newPage = p.page; // Gets the current page
                if (p.reccount === 0 && newPage > p.lastpage && newPage > 1) {
                    // if after deleting there are no rows on the current page and lastpage != firstpage than
                    newPage--; // go to the previous page
                }
                // reload grid to make the row from the next page visable.
                $(p.pager + " input.ui-pg-input").val(newPage); //Here setting the new page into textbox before loading in case of longer grid it would look nice
                $('#jqgCars').trigger("reloadGrid", [{page: newPage}]); // reloading grid to previous page
            } 
        });

問題#2の解決策は、オレグが投稿したとおりです

これは jqGrid v4.1.2 で正常に動作します

4

3 に答える 3

0

#1について、あなたは次のように述べました:

ReloadGrid を明示的に使用すると、コントローラーからデータ全体がリロードされ、ネットワーク負荷が増加します。

しかし、jqGrid は一度に 1 ページのデータしか取得しないため、これはあなたがしなければならないことだと思います。サーバーからリロードしない場合、グリッドはどのように再生成されるのでしょうか? それとも、何かが足りないのでしょうか?


#2 に関しては、AJAX 呼び出しの後、グリッドは XML/JSON 応答からのページ番号を使用します。これは、grid.base.js のソース コードで確認できます。

ts.p.page = $.jgrid.getXmlData( xml,xmlRd.page ) || 0;

...

ts.p.page = $.jgrid.getAccessor(data,dReader.page) || 0;

どちらの関数にも、ページャーのページ番号を更新するための呼び出しが含まれています。

if (!more) { ts.updatepager(false,true); } // Note: More is true if pageNum > 0

したがって、1 つの解決策は、指定されたページ番号が最大値より大きいかどうかをサーバー コードで検出し、応答で最大値に戻すことです。実際のデータをクエリする前にこれを行うと、そのクエリを調整して最後のページのデータを返すこともでき、エラー メッセージを表示する必要がなくなります。

于 2012-06-06T13:48:46.603 に答える
0

私は同じ問題を抱えています。これは、この問題に対する私の解決策です:

$("#jqgCars").clearGridData(true).trigger(
   "reloadGrid", [{ current: true }]
);
于 2017-03-17T21:56:54.237 に答える