2013-06-03 3 views
16

के बाद केंडो ग्रिड में रिकॉर्ड गिनती प्राप्त करें मैं पढ़ना (रीफ्रेश) के बाद अपने केंडो ग्रिड से रिकॉर्ड गिनती को धक्का देने में सक्षम होना चाहता हूं।डेटासोर्स.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)) 
) 

मेरे नियंत्रक कार्रवाई:

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

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

यहाँ मेरी समारोह है कि डेटा ताज़ा बलों

यहाँ मेरी केंडो ग्रिड है

जहां मैंने अपने TODO को jQuery फ़ंक्शन में रखा है, मैं पंक्तियों की संख्या प्राप्त करने में सक्षम होना चाहता हूं और उस नंबर को अपने पृष्ठ पर एक विशिष्ट elemnt में धक्का देना चाहता हूं।

उत्तर

33

एपीआई के अनुसार संदर्भ here

डेटा स्रोत कुल() फ़ंक्शन है। तो तुम सिद्धांत रूप में, निम्नलिखित करने के लिए सक्षम होना चाहिए:

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

आपके उत्तर @Quinton Bernhardt के लिए धन्यवाद। Fetch() फ़ंक्शन मुझे eluding था, लेकिन उस संदर्भ में आप मुझे चाल भेज दिया। Thanx फिर से :) – gardarvalur

+2

var searchWindowSource = $ ("# SearchWindowGrid") डेटा ("kendoGrid")। डेटा स्रोत; searchWindowSource.fetch (फ़ंक्शन() { var कुल = searchWindowSource.total(); }); – gardarvalur

+0

'कुल()' फिल्टर के साथ भी काम करता है। यदि ग्रिड 'डेटा स्रोत 'पर' फ़िल्टर' लागू किया गया है, तो यह भी हमें फ़िल्टर किए गए रिकॉर्ड की गिनती देता है। – Paritosh

9

मैंने पाया कि आप .total()() का अनुरोध करते हैं एक .read के बाद से काम ग्रिड वास्तव में ताजा नहीं होगा, भले ही आप फोन रीफ्रेश() रीड फ़ंक्शन के ठीक बाद।

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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^