2013-06-03 42 views
16

我希望能夠在讀取(刷新)後從我的Kendo網格中推入記錄數。dataSource.read之後在Kendo Grid中獲取記錄數

這裏是我的劍道網:

@(Html.Kendo().Grid(Model) 
     .Name("SearchWindowGrid") 
     .Columns(columns => 
      { 
       columns.Bound(p => p.SYSTEM_ITEMS_SEGMENT1).Hidden(); 
      }) 
     .ClientRowTemplate(
      "<tr>" + 
      "<td>" + 
       "<span><b>#: SYSTEM_ITEMS_SEGMENT1#</b></span>&nbsp;<br/>" + 
       "<span>#: DESCRIPTION# </span>" + 
      "</td>" + 
      "</tr>" 
    ) 
     .DataSource(dataSource => dataSource 
     .Ajax() 
     .Read(read => read.Action("PopulateSearchWindow", "Item").Data("additionalSearchWindowInfo")) 
     .Events(ev => ev.Error("onErrorSearchWindow")) 
    ) 
     .Selectable(s => s.Enabled(true).Mode(GridSelectionMode.Single).Type(GridSelectionType.Row)) 
     .Scrollable(s => s.Enabled(true).Height(450)) 
) 

我的控制器動作:

public ActionResult PopulateSearchWindow([DataSourceRequest] DataSourceRequest request, string option, string searchText, string searchDesc) 
    { 
     try 
     { 
      var derps= _idg.SearchItems(searchText, searchDesc, _adg.OrganizationCode).ToList(); 

      return Json(derps.ToDataSourceResult(request, ModelState)); 
     } 
     catch (Exception e) 
     { 
      ModelState.AddModelError("ExceptionErrors", e.Message); 
      return Json(new List<Derp>().ToDataSourceResult(request, ModelState)); 
     } 
    } 

這裏是我的功能,迫使數據刷新:

function refreshData(){ 
     $("#SearchWindowGrid").data("kendoGrid").dataSource.read(); 
     //TODO: get the total count and push to #countElement 
     var count = $("#SearchWindowGrid").data("kendoGrid").length; //not sure what to do here 
     $("#countElement").val(count); 
    } 

我將TODO放在jQuery函數中的位置我希望能夠獲取行數並將該數字推送到頁面上的特定元素。

回答

33

根據API參考here

則dataSource具有總共()函數。所以,你應該能夠做到以下幾點,在理論上:

function refreshData(){ 
     var grid = $("#SearchWindowGrid").data("kendoGrid"); 
     grid.dataSource.read(); 
     var count = grid.dataSource.total(); 
     $("#countElement").val(count); 
    } 
+0

謝謝你的回答@Quinton Bernhardt。 fetch()函數正在逃避我,但是您發送給我的引用完成了這個任務。 Thanx again :) – gardarvalur

+2

var searchWindowSource = $(「#SearchWindowGrid」)。data(「kendoGrid」)。dataSource; searchWindowSource.fetch(function(){ var total = searchWindowSource.total(); }); – gardarvalur

+0

'total()'即使使用過濾器也能工作。如果'filter'應用於grid'dataSource',那麼它也會給我們計算已過濾的記錄。 – Paritosh

9

我發現,當你一個.read後請求。總()()函數電網不會是真的刷新,即使你打電話.refresh()緊跟在讀函數之後。通過定義change事件,下面將決定你得到總更優雅,更準確:

@(Html.Kendo().Grid(Model) 
    .Name("SearchWindowGrid") 
    ...  
.DataSource(dataSource => dataSource 
    .Ajax() 
    .Read(read => read.Action("PopulateSearchWindow", "Item").Data("additionalSearchWindowInfo")) 
    .Events(ev => ev.Error("onErrorSearchWindow").Change("OnGridChange")) 
) 
) 

中使用以下腳本:

function refreshData(){ 
    var grid = $("#SearchWindowGrid").data("kendoGrid"); 
    grid.dataSource.read(); 
    grid.refresh(); 
} 

function OnGridChange() { 
    var grid = $("#SearchWindowGrid").data("kendoGrid"); 
    var count = grid.dataSource.total(); 
    $("#countElement").val(count); 
} 
+0

謝謝@Shadi,這將是從網格本身使用事件更準確的方式。事實上,我相信我在實現這個答案時最終使用了刷新功能,因爲我很難刷新數據。 – gardarvalur

0

gardarvalur代碼工作太細:

var gridElements = $("#MyGri").data("kendoGrid").dataSource; 
gridElements.fetch(function() 
{var total = gridElements.total(); })