2016-05-28 8 views
0

Ich habe ein Kendo Grid mit Kontrollkästchen Spalte. Ich möchte alle Kontrollkästchen im Raster aktivieren und über die Seiten halten. Ich habe eine Methode CheckAll(), aber es überprüft nur die erste Seite von Kendo Grid. Wie können Sie alle Kontrollkästchen mit einem Klick auf den Link oder die Schaltfläche aktivieren? Mein Code ist hier:Wie Sie alle Kontrollkästchen in Telerik Kendo überprüfen Raster

<div style="text-align:right; font-size: 0.9em;height:28px;position: relative;"> 

     <span style="float:left;text-align:left;"> 
      <a href="#" onclick="checkAll();">Check All</a>&nbsp; 
      <a href="#" onclick="uncheckAll();">Uncheck All</a>&nbsp; 
      <a class="k-button k-button-icontext k-grid-Patient" id="hrefCheckedPatients" href="#" onclick="getChecked();">Export to PDF</a>&nbsp; 
      <a href="#" id="lnkPdfDownload" style="display:none;" onclick="$(this).hide();">Download Generated PDF</a> 
      <label id="checkedMsg" style="color:red;display:none;"></label> 
     </span> 

    </div> 
@(Html.Kendo().Grid<RunSummary>() 
      .Name("CheckedPatients")   
      .DataSource(datasource => datasource 
       .Ajax().PageSize(25)   
       .Sort(sort => sort.Add("UniqueId").Ascending())       
       .Read(read => read.Action("GetRunSummaries", "PatientReport"))) 
      .Columns(columns => 
       { 

        columns.Bound(c => c.UniqueId).Title(ELSORegistry.Resources.Views.Home.HomeStrings.UniqueId) 
         .ClientTemplate("<input type='checkbox' class='primaryBox' id='#= UniqueId #'>#= UniqueId #</input>"); 
        columns.Bound(c => c.RunNo).Title(SharedStrings.Run); 
        columns.Bound(c => c.Birthdate).Title(SharedStrings.Birthdate).Format("{0:g}").Filterable(true); 

        columns.Bound(c => c.customAge).Title(SharedStrings.Age) 
         .Filterable(
          filterable => filterable 
           .UI("AgeFilter") 
           .Extra(false) 
           .Operators(operators => operators 
            .ForString(str => str.Clear().IsEqualTo("Is equal to")) 
            ) 

         ); 

        columns.Bound(c => c.TimeOn).Title(PatientStrings.DateOn) 
         .Format("{0:g}") 
         .Filterable(true); 
        columns.Bound(c => c.TimeOff).Title(PatientStrings.DateOff) 
         .Format("{0:g}") 
         .Filterable(true); 
        columns.Bound(c => c.DischargedAlive).Title(PatientStrings.DischargedAlive).Filterable(true).ClientTemplate("#= DischargedAlive ? 'Yes' : 'No' #"); 
        columns.Bound(c => c.ShowSubmitted).Title(PatientStrings.Submitted).Filterable(true).ClientTemplate("#= ShowSubmitted ? 'Yes' : 'No' #"); 
        columns.Bound(c => c.SupportTypeEnum).Title(PatientStrings.SupportType).Filterable(true);//.ClientTemplate("#= SupportType ? 'Yes' : 'No' #"); 
       } 
     ) 
      .Pageable(p => p.PageSizes(new[] {10, 25, 50, 100})) 
      .Sortable() 
      .Filterable() 
      .Events(e => e.FilterMenuInit("FilterMenuFuncWithAge")) // apply x [closing box] on pop up filter box 
     ) 
<script type="text/javascript"> 


    function checkAll() { 
     $('input').prop('checked', 'checked'); 
    } 

    function uncheckAll() { 
     $('input').removeAttr('checked'); 
    } 
</script> 

Antwort

2

Sie benötigen datasource Eigenschaft nicht die Ansicht zu aktualisieren. Versuchen Sie so etwas wie das in CheckAll Funktion:

var dataSource =('[name]="CheckedPatients"').data('kendoGrid').dataSource; 
var data = dataSource.data(); 
var totalNumber = data.length; 

for(var i = 0; i<totalNumber; i++) { 
    var currentDataItem = data[i]; 
    currentDataItem.set("ShowSubmitted", "true"); 
} 

UPDATE

// here all filtered/sorted data as in grid. 
var view = dataSource.view(); 

Here Sie Kendo docs über datasource Objekt

UPDATE2 hier Lösung lesen können für alle Daten erhalten aus ausgelagert Datenquelle:

var dataSource = $("#grid").data("kendoGrid").dataSource; 
var filters = dataSource.filter(); 
var allData = dataSource.data(); 
var query = new kendo.data.Query(allData); 
var data = query.filter(filters).data; 
+0

Vielen Dank, es funktioniert perfekt. Gibt es eine Möglichkeit, nur die Elemente einzuschließen, die nach der Filtration zurückbleiben? – alenan2013

+0

Als Antwort auf diese Weise markieren, wird verhindert, dass andere neue Antworten posten, wenn die Frage bereits beantwortet wurde. Check out new update –

+0

Nochmals vielen Dank für Ihre schnelle und nützliche Antwort. Aber view = dataSource.view() nimmt nur gefilterte Daten von der ersten Seite des Rasters. Ich möchte alle gefilterten Daten (von allen Seiten) erhalten. Ist es möglich? – alenan2013

Verwandte Themen