编程设置网格排序(Programmatically setting grid sort)

2019-08-04 01:42发布

是否可以读取数据,避免第二服务器读取之前编程设置KendoUI数据源的排序参数? 范围设置了某个用户交互的默认排序。 怎么样?

这里是什么,我试图做一个例子,因为答案是没有得到的点(或也许我不理解的事情是如何工作的)。

我定义了一个数据源剑道与初始排序:

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"}
    ]
});

这个数据源绑定到剑道格:

var grid = $("element").kendoGrid({
    dataSource: datasource   
});

然后,我有一个按钮,调用的数据源“读”,并用数据填充的第一页格:

$("#btn").bind("click", function(e) {
    datasource.page(1);
}); 

通过这种方式,点击按钮后,用户获得由“field_1”和“field_2”有序的数据,而网格显示这类的列标题。 然后,用户可以以任何方式重新排序数据,通过点击列标题。

我想这样做的是默认排序恢复到最初的一个,作为数据源宣言列标题再次定义,显示它,并没有重新创建一个新的数据源。

就像是:

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

提供的解决方案似乎并没有到达点(和我还是不明白,为什么我失去的信誉分,这似乎是不那么平凡,应该由框架中提出一个合理的问题)。

请告诉我,我错了(我不担心失去信誉 - 我想才明白如何解决问题)。

Answer 1:

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


Answer 2:

是。 它通过是可能的排序设置。



Answer 3:

这里是你问到底是什么一个的jsfiddle: http://jsfiddle.net/MechStar/c2S5d/

概括地说,虽然,你需要设置数据源最初空,然后注入数据源时,你从使用者所要输入:

。myKendoGrid.data( “kendoGrid”)的setDataSource(getKendoDataSource( “货主名称”, “ASC”));

var getKendoDataSource = function (sidx, sord) {
  return new kendo.data.DataSource({
    type: "odata",
    transport: {
      read: "http://demos.kendoui.com/service/Northwind.svc/Orders"
    },
    pageSize: 10,
    serverPaging: true,
    serverSorting: true,
    sort: {
      field: sidx ? sidx : "",
      dir: sord ? sord : ""
    }
  });
};
var myKendoGrid = $("#grid").kendoGrid({
  columns: [
    { field: "OrderID" },
    { field: "ShipName" },
    { field: "ShipCity" }
  ],
  dataSource: null,
  pageable: {
    pageSizes: [10, 20, 50, 100, 200]
  },
  resizable: true,
  scrollable: false,
  sortable: {
    allowUnsort: false
  }
});
$("#link").click(function () {
  myKendoGrid.data("kendoGrid")
    .setDataSource(getKendoDataSource("ShipName", "asc"));
});


Answer 4:

所以,你要设置的排序它读取数据的第一次过吗? 只要确保你已经autobind:假你的UI控件,然后设置数据源的排序属性,然后调用datasource.read()当你准备好了排序的数据。



Answer 5:

我知道你想达到什么目的。 我不得不因为我们节省了用户的排序和过滤(在我的情况下,客户端)做相同的,我们不能用网格功能getOptions / setOptions其他原因。 即使您设置autobind:假的 ,这是行不通的,你期望的那样,如果你看到autobind的定义:

http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-autoBind

如果设置为false初始化过程中部件将不绑定到数据源。 在这种情况下的数据绑定当数据源的变化事件被触发将发生。 默认情况下,小部件将结合在配置中指定的数据源。

当你做一个dataSource.sort(),这将激发一个更改事件,那么, 的数据源中的隐式进行(这就是为什么你有第二个服务器读取)。

所以,你所要做的就是创建所需的排序选项一个新的数据源,然后调用dataSource.read()明确。

例如(您可以延长你的默认选项为不重复配置):

var options = $.extend({}, dataSourceOptions);
options.sort = [
        {field: "field_1", dir: "asc"},
        {field: "field_2", dir: "asc"}
    ];
var dataSource = new kendo.data.DataSource(options);
grid.setDataSource(dataSource);
grid.dataSource.read();

希望这有助于。 问候!



文章来源: Programmatically setting grid sort