【问题标题】:Kendo Grid Sort By Descending Before Ascending on Header Click剑道网格按降序排序,然后在标题单击上升序
【发布时间】:2015-05-29 07:06:43
【问题描述】:

当我们点击标题栏时,剑道网格的默认排序方向是升序。

当用户第一次点击标题时,我想按降序对剑道网格进行排序。

例子:

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-ui kendo-grid kendo-asp.net-mvc


    【解决方案1】:

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

    $("#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;
              }
    });
    

    【讨论】:

    • 当我做这样的事情时,剑道仅在第一次数据源绑定时按降序加载数据。我想在 HEADER CLICK 而不是数据绑定上对数据进行排序。在第一次数据绑定时,数据应该按学生姓名的升序加载。
    【解决方案2】:

    我也在寻找这个并且遇到了这个问题。 在此期间我找到了解决方案。 我们创建一个函数来反转字段:

    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 替换为您的剑道网格 ID。

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

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

    【讨论】:

    • 我尝试了这个解决方案,但是 kendo 在设置它后会在某处删除该属性。如果我之后手动设置它,它工作正常。我还检查了该属性是否确实添加到了 dataBound 事件中,但由于某种原因,kendo 稍后将其删除。
    猜你喜欢
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 2020-06-13
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多