javascript 多列排序 - Jqgrid

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/25801755/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-28 05:03:11  来源:igfitidea点击:

Multiple column sorting - Jqgrid

javascriptjqueryjqgrid

提问by user2160534

I am trying to sort multiple columns on Jqgrid..But its not sorting at all. I am using below code.

我正在尝试对 Jqgrid 上的多个列进行排序。但它根本没有排序。我正在使用下面的代码。

multiSort : true,sortname: 'orderNo asc, cd',sortorder: 'desc',

multiSort : true,sortname: 'orderNo asc, cd',sortorder: 'desc',

How to do that? Is any other way to do that?

怎么做?有没有其他方法可以做到这一点?

I also tried below one

我也试过下面一个

 $('#OrderGrid').jqGrid('sortGrid', 'orderNo', true, 'asc')
 .jqGrid('sortGrid', 'cd', true, 'desc');

But no luck still now...

但现在仍然没有运气......

回答by Oleg

To set "desc"order one have to call sortGridtwice:

要设置"desc"顺序一必须调用sortGrid两次

$('#OrderGrid').jqGrid('sortGrid', 'orderNo', true, 'asc')
    .jqGrid('sortGrid', 'cd', true, 'desc')
    .jqGrid('sortGrid', 'cd', true, 'desc');

For example if you need to set sort direction of both orderNoand cdcolumns to descyou should use

例如,如果您需要将列orderNocd列的排序方向都设置为desc您应该使用

$('#OrderGrid').jqGrid('sortGrid', 'orderNo', true, 'desc')
    .jqGrid('sortGrid', 'orderNo', true, 'desc')
    .jqGrid('sortGrid', 'cd', true, 'desc')
    .jqGrid('sortGrid', 'cd', true, 'desc');

Be sure that you set multiSortoption of jqGrid to truebefore calling of sortGrid:

确保在调用之前将multiSortjqGrid 的选项设置truesortGrid

$('#OrderGrid').jqGrid('setGridParam', {multiSort: true})
    .jqGrid('sortGrid', 'orderNo', true, 'asc')
    .jqGrid('sortGrid', 'cd', true, 'desc')
    .jqGrid('sortGrid', 'cd', true, 'desc');

Alternatively you can don't use sortGridat all. The demodemonstrates the approach. It uses the following code

或者,您可以根本不使用sortGrid该演示演示了该方法。它使用以下代码

setSorting.call($grid[0], "name", "desc");
setSorting.call($grid[0], "invdate", "asc");
$grid.jqGrid("setGridParam", {
    multiSort: true,
    sortname: "name desc, invdate asc"
}).trigger("reloadGrid");

where setSortingfunction are defined as below

其中setSorting函数定义如下

var setSorting = function (colName, sortOrder) {
    var $self = $(this),
        colModel = $self.jqGrid("getGridParam", "colModel"),
        headers = $self[0].grid.headers,
        showSortIconsInAllCols = $self.jqGrid("getGridParam", "viewsortcols")[0],
        cmLength = colModel.length,
        cm,
        $sortSpan,
        i;
    for (i = 0; i < cmLength; i++) {
        cm = colModel[i];
        if (cm.name === colName) {
            cm.lso = String(sortOrder).toLowerCase() === "desc" ? "desc" : "asc";
        }
        $sortSpan = $(headers[i].el).find(">div.ui-jqgrid-sortable>span.s-ico");
        if (showSortIconsInAllCols || cm.lso) {
            $sortSpan.show();
            if (cm.lso) {
                $sortSpan.find(">span.ui-icon-" + cm.lso)
                    .removeClass("ui-state-disabled");
            }
        }
    }
};