Программная настройка сортировки сетки

Можно ли программно установить параметр сортировки источника данных KendoUI перед чтением данных и избежать повторного чтения с сервера? Область действия задает сортировку по умолчанию для определенного взаимодействия с пользователем. Как?

Вот пример того, что я пытаюсь сделать, потому что ответы не доходят до сути (или, может быть, я не понимаю, как все работает).

Я определяю источник данных Kendo с начальной сортировкой:

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

Этот источник данных связан с сеткой Kendo:

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

Тогда у меня есть кнопка, которая вызывает "читать" на DataSource и заполняет сетку первой страницей данных:

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

Таким образом, после нажатия кнопки пользователь получает данные, упорядоченные по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);
}); 

Представленные решения, похоже, не достигают цели (и все же я не понимаю, почему я теряю очки репутации за законный вопрос, который, кажется, не так тривиален и должен решаться структурой).

Пожалуйста, покажите мне, что я не прав (я не беспокоюсь о потере репутации - я хотел бы просто понять, как решить проблему).

 Matteo Piazza18 дек. 2012 г., 11:08
Я должен предположить, что это невозможно.
 topwik16 апр. 2013 г., 01:42
похоже, что он работает в JS, выполняя $ grid.dataSource.sort ({field: "A"Дир: "по убыванию» }, {поле: "B"Дир: "по возрастанию» }, {поле: "C"Дир: "по возрастанию» }, {поле: "D"Дир: "по убыванию» }); Единственная проблема, которую я вижу, заключается в том, что показатели сортировки нет показать на всех столбцах,

Ответы на вопрос(5)

Я знаю, чего вы пытаетесь достичь. Я должен был сделать то же самое, потому что мы сохраняем пользовательскую сортировку и фильтрацию (в моем случае клиентская сторона), и мы не можем использовать функции сеткиgetOptions / setOptions по другим причинам. Даже если вы установитеautobind ложь это не сработает так, как вы ожидаете, если вы видите определение для autobind:

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

Если установлено значение false, виджет не будет привязываться к источнику данных во время инициализации. В этом случае привязка данных будет происходить при возникновении события изменения источника данных. По умолчанию виджет будет привязан к источнику данных, указанному в конфигурации.

Когда вы делаетеdataSource.sort ()это увольняетменять событие, точитать делается в dataSource неявно (что 'почему у вас второе чтение сервера).

Итак, вам нужно создать новый источник данных с необходимыми опциями сортировки, а затем вызвать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();

Надеюсь, это поможет. С уважением!

Да. Это возможно черезСортировать установка.

 Matteo Piazza13 дек. 2012 г., 16:47
Не на самом деле, сортировка вызывает второй вызов на сервер. Я хотел бы изменить сортировку перед чтением данных, изменив сортировку по умолчанию.
 Atanas Korchev13 дек. 2012 г., 22:59
Вздох ... Вы действительно попробовали это? Возможно, вы используете метод сортировки вместо опции конфигурации сортировки.
 Atanas Korchev14 дек. 2012 г., 13:56
Затем используйте функцию parameterMap. Он вызывается каждый раз, когда делается запрос. Найти больше информации в документах:docs.kendoui.com/api/framework/...
 Matteo Piazza14 дек. 2012 г., 10:01
Я попробовал оба. Не могли бы вы привести пример? Пожалуйста, обратитесь к комментарию, который я оставил другому ответу, чтобы понять, что я пытаюсь сделать.

Вот jsfiddle для именно того, что вы спрашиваете:http://jsfiddle.net/MechStar/c2S5d/

В двух словах, однако, вам нужно изначально установить для dataSource значение null, а затем ввести dataSource, когда вы получите необходимые данные от пользователя:

myKendoGrid.data (»kendoGrid») .SetDataSource (getKendoDataSource (»Название судна", "по возрастанию»));

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

Итак, вы хотите установить сортировку до того, как она прочитает данные в первый раз? Просто убедитесь, что у вас есть autobind: false в вашем пользовательском элементе управления, затем установите свойства сортировки в источнике данных, а затем вызовите datasource.read (), когда вы будете готовы получить отсортированные данные.

 Robin Giltner14 дек. 2012 г., 18:43
Вы можете сделать это. var myDataSource = new kendo.data.DataSource ({}); myDataSource.sort = [{field: "myFieldName»Дир: "по возрастанию»}, {поле: "myOtherField»Дир: "по убыванию»}]; Затем вызовите myDataSource.read ();
 Matteo Piazza13 дек. 2012 г., 21:41
Хорошо, но если я хочу установить сортировку после, вне объявления источника данных, перед каждым вызовом чтения, потому что условие сортировки изменяется или просто сбрасывается до значения по умолчанию? Мне кажется, что единственный способ добиться этого - уничтожить существующий источник данных, создав новый с новым параметром сортировки.
var kendoGrid = $("#grid").data('kendoGrid');
var dsSort = [];
dsSort.push({ field: "fieldName1", dir: "asc" });
dsSort.push({ field: "fieldName2", dir: "desc" });
kendoGrid.dataSource.sort(dsSort);
 Drew Delano03 июл. 2015 г., 23:35
Я думаю, что это должно быть отмечено как ответ.
 agDev31 авг. 2017 г., 23:09
Можно ли обновить фактическую сортировку grid.dataSource.data ()? не только вид

Ваш ответ на вопрос