2015-08-20 2 views
0
$(document).ready(function() { 

    var agenciesData = new kendo.DataToken.DataSource({ 
     type: 'webapi', 
     transport: { 
      read: { url: "/api/Agencies/", dataType: "json", data: { activity: getActivity() } }, 
      create: { url: "/api/Agencies", type: "POST", dataType: "json" }, 
      destroy: { url: "/api/Agencies/{0}", type: "DELETE" }, 
      update: { url: "/api/Agencies/{0}", type: "PUT" }, 
      idField: "ID" 
     }, 
     filter: [{ field: "Activity", operator: "eq", value: getActivity() }], 
     pageSize: 15, 
     page: 1, 
     total: 0, 
     serverPaging: true, 
     serverSorting: true, 
     serverFiltering: true, 
     schema: { 
      data: "Data", 
      total: "Total", 
      model: { 
       id: "ID", 
       fields: { 
        ID: { editable: false, type: "number" }, 
        AgencyName: { type: "string" }, 
        AgentName: { type: "string" }, 
        Address: { type: "string" }, 
        City: { type: "string" }, 
        Tel1: { type: "string" }, 
        Tel2: { type: "string" }, 
        Pele: { type: "string" }, 
        Activity: { type: "number" }, 
        ToDate: { type: "date" } 
       } 
      } 
     } 
    }); 

    $("#agenciesGrid").kendoGrid({ 
     dataSource: agenciesData, 
     toolbar: [{ text: "valid", className: "validAgents" }, { text: "not valid", className: "notValid" }, { text: "all", className: "allAgents" }, { text: "potential", className: "potetial" }], 
     editable: false, 
     navigatable: true, 
     sortable: true, 
     autoBind: false, 
     height: 430, 
     pageable: { refresh: true }, 
     columns: [ 
      { field: "ID", hidden: true }, 
      { field: "AgencyName", title: "agency", width: 150, filterable: { cell: { operator: "contains" } } }, 
      { field: "AgentName", title: "agent", width: 150, filterable: { cell: { operator: "contains" } } }, 
      { field: "Address", title: "address", width: 200, template: "#= Address + ' ' + City #", filterable: false }, 
      { field: "Tel1", title: "phones", width: 300, template: "#= Tel1 + ' : ' + Tel2 + ' : ' + Pele #", filterable: false }, 
      { field: "Activity", title: "active", width: "90px" }, 
      { field: "ToDate", title: "end Contract", type: "date", width: 90, format: "{0:dd/MM/yyyy}", parseFormats: ["yyyy-MM-ddThh:mm:ss"] } 
     ] 
    }); 


    $(".validAgents").click(function() { //valid 
     $("#myActivity").val("1"); 
     $('#agenciesGrid').data().kendoGrid.dataSource.read({ activity: "1" }); 
    }); 

    $(".notValid").click(function() {//notValid 
     $("#myActivity").val("2"); 
     $('#agenciesGrid').data().kendoGrid.dataSource.read({ activity: "2" }); 
    }); 

    $(".potetial").click(function() {//potetial 
     $("#myActivity").val("3"); 
     $('#agenciesGrid').data().kendoGrid.dataSource.read({ activity: "3" }); 
    }); 
}); 


function getActivity(){ 
    var myActivity = $("#myActivity").val(); 
    return myActivity; 
} 

При использовании кендо сетки уже отфильтрованный параметром, как: $ ('# someGrid') данных() kendoGrid.dataSource.read ({активность: значение})..; я вижу ГЭТ: https://localhost:44305/api/Agencies/?sort=&page=1&pageSize=15&group=&filter=&activity=1кендо сетки сервер повторно фильтрации источника данных

сетки фильтра, как ожидается, но, когда я хочу сделать подкачки, сортировка, обновление - я получаю всю информацию, игнорируя фильтр, который я сделал. и я вижу ПОЛУЧАЕТЕ: https://localhost:44305/api/Agencies/?sort=&page=1&pageSize=15&group=&filter=

Как я могу сохранить мой фильтр состояние, чтобы сделать подкачки и сортировку на данных пришли со стороны сервера? даже когда я использовал диффере подход, как «прокручивать: {виртуальные: истинные}», и когда я прокрутите вниз - каждый запрос без фильтрации ...

Благодаря

+0

попробуйте использовать метод 'dataSource.filter (filter)' вместо того, чтобы помещать фильтр в '.read (filter)'. Если '{activity: value}' не является фильтром, а дополнительные данные должны быть переданы на сервер, попробуйте поместить его в 'transport.read.data' вместо – user1102901

+0

, как я могу пейджинговать отфильтрованные данные, не уничтожая набор данных? – AloniSoft

+0

Вы имели в виду использовать подкачку и сортировку на стороне клиента? Таким образом, он не будет вызывать сервер снова, когда вы захотите перейти на страницу и сортировать. – user1102901

ответ

1

ли вы попробовать

var agenciesData = new kendo.DataToken.DataSource({ 
    filter : function() { 
    return object; 
    } 
}); 

Я имею в виду попробовать использовать фильтр как функцию, и вы можете делать свою логику внутри функции в зависимости от ситуации.

+0

теперь с вашим советом - я сделал это: filter: function() { var ds = $ ("# agencyGrid"). Data ("kendoGrid"). DataSource; ds.filter ([{"filters": [{"field": "Activity", "operator": "eq", "value": getActivity()}]}]); } и ссылка reqest выглядят так:/api/Agencies /? Sort = & page = 1 & pageSize = 15 & group = & filter = & activity = 1, которая вообще не является фильтром – AloniSoft

+0

, чтобы мне нужно (на сервере) отменить параметр activiy? – AloniSoft

+0

с этим фильтром низкая производительность, потому что на сервере получить из всего списка и вернуть фильтр ... – AloniSoft

0

Окончательное решение заключалось в том, чтобы читать данные типа: читать: {url: "api/AgentsConv", dataType: "json", data: function() {return {agencyId: $ ("# AgentIdTxt") .val()}; }} как пользователь1102901, предлагаемый с самого начала.

Я сделал некоторый чистый код, и он работает лучше фильтра и с хорошей производительностью. BIG THANKS user1102901 !!!

Смежные вопросы