Kendo ui grid фильтр, сортировка и подкачка на сервере



Я использую Kendo grid и хочу выполнять фильтрацию, сортировку и подкачку на сервере. Я понимаю, что должен добавить к источнику данных:



serverPaging: true,
serverSorting: true


Но как я могу сказать сетке / источнику данных, какой url он должен использовать для сортировки, фильтрации и т. д.
А что, если я сам захочу выполнить сортировку? Я хочу использовать контроль, который предоставляет кендо, но сам пойти на сервер. Есть ли такое событие, как "sortTriggered", где я могу назвать" prevntDefault " или что-то в этом роде... Я не знаю.

581   3  

3 ответов:

Взгляните на этот образец. Он использует JavaScript api MobileServices для Windows Azure, но показывает, как самостоятельно обрабатывать подкачку и сортировку на сервере.

Http://jsbin.com/efeKiwO/11/edit

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

read: function(options) {
        // Get the table
        var table = client.getTable("Customer");

        // Build base query
        var query = table.includeTotalCount();

        // Add paging
        if(options.data.skip !== undefined && options.data.take !== undefined) {
          query = query.skip(options.data.skip).take(options.data.take);
        }

        // Add sorting
        if(typeof options.data.sort !== "undefined" && options.data.sort !== null) {
          for(var i = 0; i< options.data.sort.length; i++) {
            if(options.data.sort[i].dir === "desc") {
              query = query.orderByDescending(options.data.sort[i].field);
            }
            else {
              query = query.orderBy(options.data.sort[i].field);
              }
          }
        }

        var promise = query.read();

        promise.done(function(data) {
          options.success(data);
        });
      },

Внутри этой функции вы можете делать все, что захотите. Вместо используя библиотеку javascript, подобную этому образцу, вы можете сделать $.getJSON call, или $.Аякс колл, или что еще ты хочешь сделать. Объект параметра функции будет содержать все необходимое для подкачки, сортировки и фильтрации. После того, как у вас есть данные, просто позвоните опциям.успех (dataSet); при правильной сортировке / выгрузке набора данных и ваша сетка будет привязана к нему.

Ваша конфигурация почти там,

Чего не хватает, так это секретного соуса для подключения к MVC.

Предположим, что конфигурация источника данных выглядит следующим образом:

var myDataSource = new kendo.data.DataSource({
    transport: {
        read: {
            url: 'Users/Read',
            type: 'POST'
        }
    },
    serverSorting: true,
    serverFiltering: true,
    serverPaging: true
}

На стороне сервера в UsersController.cs (пример), вы должны получить [DataSourceRequest]

public DataSourceResult Read([DataSourceRequest] DataSourceRequest request)
{
    // Here you might actually get the items from your cache or database. 
    var List<User> myList = new List<User>();         

    // Here is when the kendo magic happens. 
    return myList.ToDataSourceResult(request);
}

Почему [DataSourceRequest] так важен?

Потому что он содержит параметры подкачки, сортировки и фильтрации, которые ваша сетка запрашивает у сервера. Так что если вы хотите сделать алгоритм вы сами должны изучить запрос и обработать эти параментаторы. Просто не забудьте вернуть экземпляр объекта DataSourceResult.

Если ваши объекты находятся в кэше и ваши поля не нуждаются в специальной обработке для фильтрации, группировки, сортировки и т. д., то просто используйте расширение kendo C# ToDataSourceResult. Он будет обрабатывать ваши элементы и применять фильтрацию, сортировку, конфигурацию подкачки, используя динамические операторы LINQ.

Сетка Kendo использует только один url-адрес для получения данных,и он будет взят из объекта DataSource.

Этот url-адрес будет вызываться сеткой каждый раз, когда ей потребуются данные, и параметры сортировки и подкачки будут добавлены к каждому запросу, сделанному на серверную базу в контексте сетки.

Затем сервер получит стандартный веб-запрос со всеми параметрами, необходимыми для построения вашего собственного запроса. Затем вам нужно будет отправить ответ в правильном формате (например: JSONP Одата).

Comments

    Ничего не найдено.