【问题标题】:Kendo Grid Decimal Column Sorting剑道网格十进制列排序
【发布时间】:2014-05-27 11:34:09
【问题描述】:

我想对剑道网格列进行排序。在下面的屏幕截图中,我需要对 WBS 列进行升序或降序排序。在该列中具有 1.1、1.1.1、1.2.1、1.2.1.1、1.2.1.2、1.3、2、2.1、2.1.1、2.2 等值,

【问题讨论】:

    标签: mvvm kendo-ui telerik kendo-grid


    【解决方案1】:

    基本上你需要为WBS 列定义一个临时的compare 函数。这可以使用columns.sortable.compare

    现在,问题是发明一个能够根据需要比较两个值的函数。

    我想到了以下几点:

    1. 拆分原始值,用“.”分隔在值数组中。例如:"10.1.2" 变为 [ "10", "1", "2" ]
    2. 逐一比较数组的值,记住一个可能比另一个短,这意味着它更小(即10.1 更小10.1.1)。

    这可能是这样的:

    columns   : [
        ...
        { 
            field: "wbs", 
            width: 150, 
            title: "WBS",
            sortable: {
                compare: function (a, b) {
                    var wbs1 = a.wbs.split(".");
                    var wbs2 = b.wbs.split(".");
                    var idx = 0;
                    while (wbs1.length > idx && wbs2.length > idx) {
                        if (+wbs1[idx] > +wbs2[idx]) return true;
                        if (+wbs1[idx] < +wbs2[idx]) return false;
                        idx++;
                    }
                    return (wbs1.length > wbs2.length);
                }
            }
        }
        ...
    ]
    

    注意:正如我之前所说,作为split 的结果,我在数组中得到的是strings。所以我们使用一个小技巧来比较number 的值是非常重要的,它是在+ 之前。因此,当我执行if (+wbs1[idx] &gt; +wbs2[idx]) 时,我实际上是在将wbs1[idx]wbs2[idx] 上的值作为数字进行比较。

    你可以在这里看到它:http://jsfiddle.net/OnaBai/H4U7D/2/

    【讨论】:

    • 嗨 OnaBai。感谢您的回复。但是 WBS 列没有在您的 jsfiddle 链接中排序。你能检查一下并给我建议吗?
    • 它适用于我的浏览器。你点击标题排序了吗?
    • 它在 chrome 中工作。但在 IE11 中不支持。
    • 我已将 Kendo UI 更新为更新的版本 (v2014.1.318)。你介意在 IE11 中的 jsfiddle.net/OnaBai/H4U7D/3 中尝试吗?
    • Onabai,您知道我们如何在 Kendo UI for ASP MVC 中实现您的解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多