0

jqGrid プラグインに問題があります。たとえば 2 ページ目にいて、任意の列の並べ替え方向を変更したい場合、サーバーは URL パラメーターとして送信されますpage=1(ただし、そうである必要がありますpage=2) 何が問題なのですか?

<table id="list" class="scroll " cellpadding="0" cellspacing="0"></table>
<div id="pager" class="scroll" style="text-align:center;"></div>
$(function () {

    $("#list").jqGrid({
        url: '/Control/UsersGridData/',
        datatype: 'json',
        mtype: 'GET',
        colNames: ['Name', 'User ID', 'Is Active', 'Last Action',  'Country'],
        colModel: [
  { name: 'Name', index: 'Name', width: 120, align: 'center', sortable: true, search: true },
  { name: 'UserID', index: 'UserID', width: 120, align: 'center', sortable: true, search: true },
  { name: 'IsActive', index: 'IsActive', width: 50, align: 'center', sortable: true, search: true },
  { name: 'LastAction', index: 'LastAction', width: 90, align: 'center', sortable: true, search: true },
  { name: 'Country', index: 'Country', width: 40, align: 'center', sortable: true, search: true }],
        pager: jQuery('#pager'),
        rowNum: 20,
        rowList: [5, 10, 20, 50],
        sortname: 'Name',
        sortorder: "desc",
        viewrecords: true,
        imgpath: '/scripts/themes/coffee/images',
        width: '800'
    });
});
4

1 に答える 1

2

ページ番号は明示的に変更されます (列ヘッダーのクリックイベント ハンドラー内で使用されるコードsortData関数の行を参照してください)。

onSortColたとえば、イベントハンドラー内の値を変更できます。<input>pager$(pagerIdSelector).find("input.ui-pg-input").val()の対応するフィールドから、現在のページの値を直接取得できますvar pagerIdSelector = $(this).jqGrid("getGridParam", "pager")

私の意見では、値を 1 にリセットすることpagerは正しい動作です。20 ページのグリッドがあり、データが「昇順」の最初の列でソートされているとします。2 番目のページが表示され、ユーザーが最初の列をクリックした場合。その場合、ソート順は「desc」に反転する必要があります。その場合、現在のページのページ番号は約 18 になります (すべてのページが行でいっぱいの場合のみ 18 です)。ユーザーが他の列をクリックし、グリッドを別の列で並べ替える必要がある場合、現在のページに表示される行は、新しい基準で並べ替えられた 20 ページの任意の場所にある可能性があります。そのため、jqGridpageはグリッドのソートごとに値を 1 にリセットします。

更新:主な質問にとって重要ではない、コードへのいくつかの追加のコメント:

  • jqGrid は、初期化時に置き換えpager: jQuery('#pager')ますpager: '#pager'。そのため、id による要素の不要な検索を行うことはありません。オプションには常に id-selector 構文を使用することをお勧めしpagerます。
  • imgpathオプション idは廃止され、jqGrid によって無視されます。したがって、それを削除する必要があります。
  • 同様に、jqGrid に必要な HTML フラグメントを に減らします<table id="list"></table><div id="pager"></div>。他のすべての属性は非推奨であり、jqGrid では使用されません。
  • プロパティsortable: true, search: trueはデフォルト (ドキュメントを参照) であり、削除する必要があります。index同様に、同じ値で使用すると、プロパティnameの定義を削除できindexます。ほとんどの列で使用したい場合align: 'center'は、プロパティのデフォルト値を変更すれば、コードを減らして簡素化できますaligncmTemplate: {align: 'center'}jqGridのオプションを使用した後(詳細については、こちらalign: 'center'を参照) 、すべての列を削除できます。すべての変更の後、 のすべての項目の定義は のcolModelように短く明確になります{ name: 'Name', width: 120 }
于 2012-10-22T14:43:45.470 に答える