2014-08-28 61 views
1

我在Kendo网格中使用工具栏过滤器下拉菜单。当用户选择下拉菜单时,我需要获取已过滤记录的数量。下面的代码不是为我工作获取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事件。

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

这是一个基本的fiddle
我希望这是你所需要的。

更新:
在您使用serverpaging的情况下,可以从数据源使用requestEnd事件。
你必须查找服务器响应。在小提琴中,你有一个“__count”属性。
更新fiddle

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

您好!感谢您的答案,但代码返回单个页面的计数。当分页启用时它不工作 – chamara 2014-08-28 09:53:26

+0

@chamara请参阅更新 – chris 2014-08-28 10:36:40

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/类型两个日期,然后点击“过滤器”按钮,它会应用在出生日期的过滤器,并显示你的总。