使用“sortGrid”方法按降序对列进行排序?

时间:2013-06-18 12:49:00

标签: jquery jqgrid

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

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

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

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

这似乎可以解决问题,至少在我的localhost上进行测试时。但是,当移动到实时环境时,它似乎偶尔也不起作用。

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

您可以使用api设置网格的排序顺序:

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

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

答案 1 :(得分:0)

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

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

如果使用loadonce:true,则jqGrid在第一次从网格加载数据后将数据类型参数更改为“ local”。接下来的所有网格重新加载(排序,分页,过滤)都在本地进行。如果要再次从服务器刷新网格数据,则应将数据类型设置为其原始值(“ 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()将以递归方式执行。

希望对您有所帮助,谢谢:)