在dataSource.read之后获取Kendo Grid中的记录数

我希望能够在读取(刷新)后从我的Kendo网格中推送记录数。

这是我的剑道网格:

@(Html.Kendo().Grid(Model) .Name("SearchWindowGrid") .Columns(columns => { columns.Bound(p => p.SYSTEM_ITEMS_SEGMENT1).Hidden(); }) .ClientRowTemplate( "" + "" + "#: SYSTEM_ITEMS_SEGMENT1# 
" + "#: DESCRIPTION# " + "" + "" ) .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().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函数中的地方我希望能够获得行数并将该数字推送到我页面上的特定元素中。

根据这里的API参考

dataSource有一个total()函数。 所以你应该能够在理论上做到以下几点:

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

我发现当你在.read()函数之后请求.total()时,即使你在read函数之后调用.refresh(),网格也不会真正刷新。 通过定义更改事件,以下内容将使总体更加优雅和准确:

 @(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); } 

gardarvalur代码也可以正常工作:

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