2014-08-28 39 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/類型兩個日期,然後點擊「過濾器」按鈕,它會應用在出生日期的過濾器,並顯示你的總。