【问题标题】:Custom Sort on Kendo Grid that can be Triggered Programmatically可以以编程方式触发的 Kendo Grid 上的自定义排序
【发布时间】:2014-10-29 15:49:45
【问题描述】:

我有一个剑道网格,并希望某些行在排序后保持固定在网格的顶部。我可以通过在每一列上指定自定义排序来实现这一点。例如:

<script>
    var ds = new kendo.data.DataSource({
        data: [
            { name: "Jane Doe", age: 30, height: 170, pinToTop: false },
            { name: "John Doe", age: 33, height: 180, pinToTop: false },
            { name: "Sam Doe", age: 28, height: 185, pinToTop: true },
            { name: "Alex Doe", age: 24, height: 170, pinToTop: false },
            { name: "Amanda Doe", age: 25, height: 165, pinToTop: true }
        ]
    });

    $('#grid').kendoGrid({
        dataSource: ds,
        sortable: {mode: 'single', allowUnsort: false},
        columns: [{
            field: "name",
            title: "Name",
            sortable: {
                compare: function (a, b, desc) {
                    if (a.pinToTop && !b.pinToTop) return (desc ? 1 : -1);
                    if (b.pinToTop && !a.pinToTop) return (desc ? -1 : 1);
                    if (a.name > b.name) return 1;
                    else return -1;
                }
            }
        }
        //Other columns would go here
        ]
    });
</script>

当用户单击列标题对网格进行排序时,这可以正常工作。但是,如果我想使用 Javascript 代码对网格进行排序,如下所示:

$('#grid').data('kendoGrid').dataSource.sort({field: 'age', dir: 'asc'});

pinToTop 字段被忽略。这是因为排序是在 DataSource 上执行的,但自定义排序逻辑是网格的一部分。

JSFiddle Example

我需要:

  • 能够在 DataSource 中指定自定义排序逻辑,这样当我使用 JavaScript 对 DataSource 进行排序时,固定的行会保持在顶部。

或者:

  • 能够从 JavaScript 执行某种网格本身,而不是 DataSource。

【问题讨论】:

  • 可以在服务器端进行自定义排序吗?

标签: javascript sorting kendo-ui kendo-grid kendo-datasource


【解决方案1】:

这不是我想要的,但我能够通过对多个字段进行排序并首先包括 pinToTop 字段来解决这个问题:

$('#grid').data('kendoGrid').dataSource.sort([{field: 'pinToTop', dir: 'desc'},{field: 'age', dir: 'asc'}]);

【讨论】:

    【解决方案2】:

    这是一个古老的问题,但对于遇到这个问题的人来说,这里有一个答案,就像我一样。

    将比较定义为函数并将其传递给数据源:

    var compareName = function (a, b, desc) {
                if (a.pinToTop && !b.pinToTop) return (desc ? 1 : -1);
                if (b.pinToTop && !a.pinToTop) return (desc ? -1 : 1);
                if (a.name > b.name) return 1;
                else return -1;
            }
    
    $('#grid').data('kendoGrid').dataSource.sort({field: 'age', dir: 'asc', compare: compareName);
    

    适用于版本 2017.2.621

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-10-27
      • 2012-08-26
      相关资源
      最近更新 更多