Kendo ui grid фильтр, сортировка и подкачка на сервере
Я использую Kendo grid и хочу выполнять фильтрацию, сортировку и подкачку на сервере. Я понимаю, что должен добавить к источнику данных:
serverPaging: true,
serverSorting: true
Но как я могу сказать сетке / источнику данных, какой url он должен использовать для сортировки, фильтрации и т. д.
А что, если я сам захочу выполнить сортировку? Я хочу использовать контроль, который предоставляет кендо, но сам пойти на сервер. Есть ли такое событие, как "sortTriggered", где я могу назвать" prevntDefault " или что-то в этом роде... Я не знаю.
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