Kendo 在 Header 单击之前按降序排列网格

Kendo Grid Sort By Descending Before Ascending on Header Click

当我们点击 header 列时,kendo 网格的默认排序方向是升序。

我想在用户第一次点击 header 时按降序对 kendo 网格进行排序。

示例:

1. Default Behavior

Studnet   Marks
abc        15
pqr        25
xyz         7

2. When Clicking on Marks Header first time

Student  Marks

pqr        25
abc        15
xyz         7

3. When clicking on Marks header second time.

Students   Marks
 xyz        7
 abc        15
 pqr        25

我正在尝试这样的事情:

 $("#priority .k-header").eq(1).click(function(ele) {
            debugger;
            var kendoGrid = $("#priority").data('kendoGrid');
            var dsSort = [];
            var sort = kendoGrid.dataSource.sort();
            if (sort.length > 0) {
                if(sort[0].dir==="asc")
                    kendoGrid.dataSource.sort({field: sort[0].field, dir: "desc"});
                if(sort[0].dir==="desc")
                    kendoGrid.dataSource.sort({field: sort[0].field, dir: "asc"});
            }

        });

但是不行。

在 kendo 数据源中指定排序如下:

$("#grid").kendoGrid({
        dataSource: {
            ..
            , sort: { field: "Marks", dir: "desc" } 
           ..
        }
    });

已编辑 你可以这样试试

设置全局值并调用更改数据源函数

var firstClick=true;

    $('#grid').data().kendoGrid.dataSource.bind('change', function(e) {
         if(firstClick){
            var kendoGrid = $("#grid").data('kendoGrid');
            var dsSort = [];
            dsSort.push({ field: "fieldName1", dir: "asc" });
            dsSort.push({ field: "fieldName2", dir: "desc" });
            ...
            kendoGrid.dataSource.sort(dsSort);
            firstClick=false;
          }
});

我也在找这个,遇到了这个问题。 同时我找到了解决方案。 我们创建一个函数来反转字段:

function reverseSortOrderSequence() {

            setTimeout(function() {
                var colSortHeaders = $("#gridId [data-role='columnsorter']");
                $.each(colSortHeaders, function(index, item) {
                    if ($(item).attr("data-dir") === undefined) {
                        $(item).attr("data-dir", "asc");
                    } else if ($(item).attr("data-dir") === "asc") {
                        $(item).attr('data-dir', 'desc');
                    } else if ($(item).attr("data-dir") === "desc") {
                        $(item).attr('data-dir', null);
                    }
                });
            });
        }

只需将 gridId 替换为您的 kendo 网格 ID。

然后,在 Kendo 网格配置的 dataBound 属性 中调用此函数:

{...
   columns: ...,
   dataBound: function(event) {
       reverseSortOrderSequence();
   }
}