2014-08-28 3 views
1

Я использую фильтр панели инструментов. Раскрывается в сетке кендо. Когда пользователь выбирает раскрывающийся список, мне нужно получить количество отфильтрованных записей. Ниже код не работает для меняПолучить Kendo Grid отфильтрованный источник данных

function ExamDateChange() { // function on dropdown change 
     var value = this.value(), 
      grid = $("#grid").data("kendoGrid"); 

     if (value) { 
      grid.dataSource.filter({ field: "ExamID", operator: "eq", value: value }); 

      grid.dataSource.fetch(function() { 
       var view = dataSource.view(); 
       alert(view.length); 

      }); 

     } else { 

      grid.dataSource.filter({}); 
     } 


    } 

ответ

1

Хорошо здесь мы идем,
я попытался также событие Chage из выпадающего меню, но он не работает, как вы сказали. Событие вызывается перед установкой источника данных сетки.

Так что, я думаю, нам нужен обратный вызов, когда данные DataSource привязаны, так что это событие dataBound из Grid.

... 
dataBound: function(){ 
    console.log("Grid data bound"); 
    // this should do the trick  
    alert(grid.data("kendoGrid").dataSource.data().length); 
}, 
... 

Вот зачаточном fiddle этого.
Надеюсь, это то, что вам нужно.

Update:
В случае, если вы используете serverpaging, вы можете использовать событие requestEnd из источника данных.
Вы должны найти ответ сервера. В скрипке вы получили свойство «__count».
Обновлено fiddle

... 
requestEnd: function (e) { 
    var response = e.response; 
    var type = e.type; 
    alert(response.d.__count); // displays "77" 
}, 
... 
+0

Здравствуйте! спасибо за ответ, но код возвращает количество одной страницы. Он не работает, когда пейджинг включен – chamara

+0

@chamara см. Обновление – chris

2

Вы можете использовать выборки, но вместо того, чтобы использовать dataSource.view().length вы должны использовать dataSource.total() метод.

Что-то вроде:

function ExamDateChange() { // function on dropdown change 
    var value = this.value(), 
     grid = $("#grid").data("kendoGrid");  
    if (value) { 
     grid.dataSource.filter({ field: "ExamID", operator: "eq", value: value }); 
     grid.dataSource.fetch(function() { 
      alert(view.dataSource.total()); 
     }); 
    } else { 
     grid.dataSource.filter({}); 
    } 
} 

в действии здесь: http://jsfiddle.net/OnaBai/f19k0vrt/5/ Тип две даты и нажмите кнопку «Фильтр» и он будет применять фильтр на День рождения и показать вам всего.

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