按多列排序Slickgrid?

tec*_*cal 8 javascript sorting jquery slickgrid

我刚开始测试Slickgrid正在进行的项目,我对它的性能印象非常深刻.我有一个要求是对多列进行排序.我没有把头完全包裹在Slickgrid的Dataview中,所以也许我错过了一些明显的东西,但是有没有办法在多列上对网格进行排序?即使UI不能处理多个排序,我希望能够按顺序调用一个函数,加上升序或降序.我能够使用Datatables执行此操作,但它没有分组(项目的另一个要求).

在最坏的情况下,我将采取在服务器上进行排序并将内容提供回客户端静态排序.

Nar*_*ana 7

我让它适用于具有多列排序的dataView.是最容易理解的人.这是来自github中的示例,除了我要为dataView.sort()传递一个参数.它总是可以,您可以在功能中处理排序方向.

grid.onSort.subscribe(function (e, args) {
    gridSorter(args.sortCols, dataView);
});

function gridSorter(sortCols, dataview) {
    dataview.sort(function (row1, row2) {
        for (var i = 0, l = sortCols.length; i < l; i++) {
            var field = sortCols[i].sortCol.field;
            var sign = sortCols[i].sortAsc ? 1 : -1;
            var x = row1[field], y = row2[field];
            var result = (x < y ? -1 : (x > y ? 1 : 0)) * sign;
            if (result != 0) {
                return result;
            }
        }
        return 0;
    }, true);
}
Run Code Online (Sandbox Code Playgroud)

以防它帮助某人.


Tin*_*Tin 6

您可以链式排序比较器进行多列排序.而不是做

function comparerOnCol1(a, b) {
  return a["col1"] - b["col1"];
}

function comparerOnCol2(a, b) {
  return a["col2"] - b["col2"];
}
Run Code Online (Sandbox Code Playgroud)

你可以做

// sort by col1, then col2
function combinedComparer(a, b) {
  return comparerOnCol1(a, b) || comparerOnCol2(a, b);  // etc.
}
Run Code Online (Sandbox Code Playgroud)

或者只是内联实现它.

至于反映UI中的排序顺序,虽然您不能直接执行,但您可以通过在要排序的列定义上设置"headerCssClass"并让它们显示箭头来应用排序指示符(或者除此之外'表示排序列).

  • 网格不会操纵您的数据.你做.话虽这么说,您不必使用DataView进行排序.只需对数据进行排序并使网格无效以反映数据中的更改.如:myData.sort(combinedComparer) (2认同)

Zig*_*oUK 6

这里有一个例子,它使用'multiColumnSort'选项.

http://mleibman.github.com/SlickGrid/examples/example-multi-column-sort.html

我认为它不起作用,因为args.sortCols总是一个1的数组.

[编辑]为了使它工作,我需要在点击列标题之前保持班次(不是非常直观的恕我直言)参见:https://github.com/mleibman/SlickGrid/pull/276