以编程方式设置网格排序

Mat*_*zza 15 sorting datasource kendo-ui

是否可以在读取数据和避免第二次服务器读取之前以编程方式设置KendoUI DataSource的sort参数?范围是为特定用户交互设置默认排序.怎么样?

这是我想要做的一个例子,因为答案没有达到目的(或者我可能不理解事情如何运作).

我用一个初始排序定义了一个Kendo DataSource:

var datasource = new kendo.data.DataSource({
    parameterMap: function (inputParams, operation) {
        return JSON.stringify(inputParams)
    },
    // default sort
    sort: [
        {field: "field_1", dir: "asc"},
        {field: "field_2", dir: "asc"}
    ]
});
Run Code Online (Sandbox Code Playgroud)

此DataSource绑定到Kendo网格:

var grid = $("element").kendoGrid({
    dataSource: datasource   
});
Run Code Online (Sandbox Code Playgroud)

然后我有一个按钮,在DataSource上调用"read"并使用第一页数据填充网格:

$("#btn").bind("click", function(e) {
    datasource.page(1);
}); 
Run Code Online (Sandbox Code Playgroud)

这样,在单击按钮后,用户获取按"field_1"和"field_2"排序的数据,并且网格在列标题上显示此排序.然后,用户可以通过单击列标题以任何方式重新排序数据.

我想要做的是将默认排序重置为初始值,如DataSource声明中所定义,在列标题上再次显示它,而不再创建新的DataSource.

就像是:

$("#btn").bind("click", function(e) {
    datasource.sort = [
        {field: "field_1", dir: "asc"},
        {field: "field_2", dir: "asc"}
    ]; 
    datasource.page(1);
}); 
Run Code Online (Sandbox Code Playgroud)

所提供的解决方案似乎没有达到这一点(我仍然不明白为什么我会因为一个似乎不是那么微不足道并且应该由框架解决的合法问题而失去声誉点).

请告诉我我错了(我不担心失去声誉 - 我想了解如何解决问题).

小智 30

var kendoGrid = $("#grid").data('kendoGrid');
var dsSort = [];
dsSort.push({ field: "fieldName1", dir: "asc" });
dsSort.push({ field: "fieldName2", dir: "desc" });
kendoGrid.dataSource.sort(dsSort);
Run Code Online (Sandbox Code Playgroud)

  • 我认为这应该标记为答案. (2认同)

Ata*_*hev 1

是的。可以通过排序设置来实现。