【问题标题】:Using the "sortGrid" method to sort a column in descending order?使用“sortGrid”方法按降序对列进行排序?
【发布时间】:2013-06-18 12:49:00
【问题描述】:

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

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

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

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

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

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

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

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

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

    【讨论】:

    • 我已经尝试过使用它。无论我在 sortGrid 之前还是之后 setGridParam,sortGrid 都会将排序顺序重置为“asc”。
    • 再次尝试使用“.trigger('reloadGrid');”一块,并得到了相同的结果。
    【解决方案2】:

    我有同样的问题,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() 会递归执行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-18
      • 2011-03-25
      • 2022-01-06
      • 1970-01-01
      • 2011-07-22
      • 2011-10-14
      相关资源
      最近更新 更多