1

我有一个在客户端排序的 jqGrid,所以我使用了sortGrid方法。但是,此方法只接受两个参数:列名和是否应重新加载网格。

我想有条件地使用此方法对升序和降序进行排序。 但是,由于排序顺序不是参数,因此该方法默认为升序排序。

我目前有一个解决方法,如果应该按降序对列进行排序,我会调用sortGrid方法两次:

if (sortCol) {
    $("#gridID").sortGrid(sortCol);
    //If descending, need to apply the sort a 2nd time
    if (sortOrder === "desc") {
        $("gridID").sortGrid(sortCol);
    }
}  

至少在我的本地主机上进行测试时,这似乎可以解决问题。但是,当转移到现场环境时,它似乎并非每隔一段时间都有效。

有一个更好的方法吗?

4

2 回答 2

0

您可以使用 api 设置网格的排序顺序,如下所示:

$("#gridID").jqGrid('setGridParam', {sortorder: "desc"}).trigger('reloadGrid');

api 调用将触发网格的重新加载,因此您不应通过 sortGrid 方法调用发出重新加载。

于 2013-06-18T13:21:17.320 回答
0

我有同样的问题, sortGrid() 不能按降序工作。

但是,问题不在于它不起作用,它实际上是 loadonce:true 属性。

如果您使用 loadonce:true jqGrid 在第一次从网格加载数据后将数据类型参数更改为“本地”。所有下一个网格重新加载(排序、分页、过滤)都在本地工作。如果您想再次从服务器刷新网格数据,您应该将数据类型设置为其原始值(“json”或“xml”)。

因此,我们需要一点技巧来克服这个问题并在 loadComplete 之后执行 sortGrid():

这是加载网格后完美选择页面和排序选项的代码。

    $('#myGrid').trigger("reloadGrid");

//SORTED_COLUMN is Global
var  DEFAULT_SORTED = false;
if (SORTED_COLUMN.index != undefined)
    DEFAULT_SORTED = true;

$("#myGrid").jqGrid({
    datatype : "local",
    autowidth : true,
    altclass : "jqgridAltRow",
    altRows :true,
    shrinkToFit :true,
    loadonce: true,
    data :data,
    editurl: 'clientArray', // to give a successful call after inline editing,
    page: CURRENT_PAGE,
    //method : 'post',
    cellEdit : 'true',
    cellsubmit : 'remote',
    beforeRequest: function () {
        responsive_jqgrid($(".ui-jqgrid"));
    },
    onSortCol: function (index, columnIndex, sortOrder) {
        SORTED_COLUMN.index = index;
        SORTED_COLUMN.columnIndex = columnIndex;
        SORTED_COLUMN.sortOrder = sortOrder;
    },
    loadComplete: function(){
        $.fn.jqm = undefined;



        setTimeout(function(){
            if(DEFAULT_SORTED){
                DEFAULT_SORTED = false;
                $('#myGrid').jqGrid('sortGrid', SORTED_COLUMN.index, false, SORTED_COLUMN.sortOrder);
                $('#myGrid').trigger('reloadGrid', [{page: CURRENT_PAGE}]);
            }
        }, 100);

        ...

if(DEFAULT_SORTED) 这个检查很重要,否则 sortGrid() 将递归执行。

希望对你有帮助,谢谢:)

于 2018-11-14T09:29:19.207 回答