2013-06-03 19 views
16

'dan sonra Kendo Grid'deki kayıt sayımını oku Okumayı (yenilemek) sonra Kendo kılavuzumdan kayıt sayısını itmeyi istiyorum.VeriSource.read

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

Benim Kontrolör eylemi:

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); 
    } 
: Burada

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

benim işlevidir veri yenileme zorlar İşte

benim Kendo Izgara olduğunu

TODO'yu jQuery işlevine yerleştirdiğimde, satır sayısını elde edebilmek ve bu sayıyı sayfamdaki belirli bir elemana atabiliyorum.

cevap

33

API göre dataSource toplam() işlevi vardır here

referans. Aradığınızda bile, sana) (a .read sonra() .total talep işlev yaparken ızgara gerçekten yenilendi olmayacağını bulundu

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

Cevabınız için teşekkürler @Quinton Bernhardt. Fetch() işlevi beni utandırdı ama bana gönderdiğiniz referans hile yaptı. Thanx tekrar :) – gardarvalur

+2

var searchWindowSource = $ ("# SearchWindowGrid") veri ("kendoGrid"). searchWindowSource.fetch (function() { var total = searchWindowSource.total(); }); – gardarvalur

+0

'toplam()', filtre ile bile çalışır. 'Filter' grid' dataSource' üzerinde uygulanırsa, o da bize filtrelenmiş kayıtların sayısını verir. – Paritosh

9

: Yani teorik olarak aşağıdakileri yapmanız gerekir .refresh() okuma işlevinden hemen sonra. İnce çok

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 için teşekkürler, bu olayları ızgaranın kendisinden kullanmanın daha doğru yolu olurdu. Aslında bu cevabı uygularken yenileme işlevini en sonunda kullandığımı düşünüyorum çünkü verileri yenilemeye zorladım. – gardarvalur

0

gardarvalur kod çalışır: Aşağıdaki komut ile

@(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")) 
) 
) 

: bir değişiklik olayı tanımlayarak, şu toplam daha şık ve doğru alma yapacak

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