0

我有 jqGrid 插件的问题。如果我在例如第二页,并且我想更改任何列的排序方向,服务器将作为 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()where var pagerIdSelector = $(this).jqGrid("getGridParam", "pager")

在我看来,将值重置pager为 1 是正确的行为。让我们有一些 20 页的网格,数据按“asc”顺序按第一列排序。如果显示第二页并且用户单击第一列。在这种情况下,排序顺序应反转为“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相同的值。如果您想在大多数列中使用,如果您要更改属性的默认值,则可以减少和简化代码。使用jqGrid 选项后(有关详细信息,请参阅此处),您可以在所有列中删除。在所有更改之后,所有项目的定义将像.nameindexalign: 'center'aligncmTemplate: {align: 'center'}align: 'center'colModel{ name: 'Name', width: 120 }
于 2012-10-22T14:43:45.470 回答