2013-06-03 15 views
16

読み取り(リフレッシュ)後、私の剣道グリッドからレコード数をプッシュできるようにします。ここで剣道グリッドのレコード数をdataSource.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)) 
) 

私のコントローラのアクション:

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

ここでは、jQuery関数にTODOを設定します。行数を取得し、その数値をページの特定のelemntにプッシュできるようにしたいと考えています。

答えて

33

APIによれば、データソースが合計()関数を有しhere

参照。お電話の場合でも、私はあなたが)(.read後に().totalを要求する機能時にグリッドが本当にリフレッシュではないであろうことがわかっ

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

@Quinton Bernhardtにお返事ありがとうございます。 fetch()関数は私を逃していましたが、あなたが私に送るリファレンスがそのトリックでした。もう一度Thanx: – gardarvalur

+2

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

+0

'total()'はフィルタでも機能します。グリッド 'dataSource'に' filter'が適用されている場合は、フィルタリングされたレコードの数も返します。 – Paritosh

9

:だから、理論的には、以下のことを行うことができるはず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); 
} 
+0

@ Shadiありがとうございました、それはグリッド自体からイベントを使用するより正確な方法です。実際には、私はデータをリフレッシュするのに苦労していたので、この回答を実装するときに最終的にリフレッシュ機能を使用したと思います。 – gardarvalur

0

gardarvalurコードがあまりにも正常に動作します:

var gridElements = $("#MyGri").data("kendoGrid").dataSource; 
gridElements.fetch(function() 
{var total = gridElements.total(); }) 
変更イベントを定義することにより、以下の合計は、よりエレガントかつ正確に取得するだろう
関連する問題