2012-06-28 6 views
12

Ho un datario e una griglia su una pagina. Voglio che la griglia venga compilata in base alla data nel datepicker. Ho fatto questo con una griglia mvc Telerik utilizzando grid.dataBind.Come associare dati a una griglia kendoui da una query ajax?

var grid = $('#Grid').data('tGrid'); 
var pDate = document.getElementById('DatePicker').value; 
$.ajax(
{ 
    type: 'POST', 
    url: '/Home/AccountSummary/', 
    dataType: 'json', 
    data: { date: pDate }, 
    success: function (result) { 
    grid.dataBind(result); 
    } 
}); 

Ora voglio fare la stessa cosa tranne che con la griglia Kendoui. So che ho bisogno di ottenere la griglia usando $('#Grid').data('kendoGrid'). Ma come legare il mio risultato alla rete?

risposta

20

Supponendo che la variabile di risultato contenga una serie di oggetti javascript e contenga dati per lo stesso numero di colonne del markup originale.

ie. result = [{"AccountId":1,"Name":"AAA"},{"AccountId":2,"Name":"BBB"}];

Provare quanto segue:

$.ajax(
{ 
    type: 'POST', 
    url: '/Home/AccountSummary/', 
    dataType: 'json', 
    data: { date: pDate }, 
    success: function (result) { 
     $("#Grid").data("kendoGrid").dataSource.data(result); 
    } 
}); 
+0

Se aggiungo la riga $ ("# Grid"). Data ("kendoGrid"). DataSource.fetch(); subito dopo dataSource.data (risultato), questo funziona per me. Per qualche ragione, non funziona senza fetch(). Grazie. – Daniel

+0

@Daniel Avete ascoltatori di eventi associati alla griglia? Potrebbero prevenire qualcosa? L'assegnazione di nuovi dati in realtà aggiorna l'intera griglia, se passi attraverso kendo.web.js vedrai esattamente cosa succede. Per un aggiornamento puoi provare a chiamare le funzioni fetch o read sull'origine dati. – Igorrious

+2

@Daniel - l'istruzione fetch è ciò che stavo cercando, grazie! –

10

È inoltre possibile fare in questo modo:

var dataSource = new kendo.data.DataSource({ 
    transport: { 
     read: function(options) { 
      $.ajax({ 
       type: "POST", 
       url: "Controller/Handler", 
       contentType: "application/json; charset=utf-8", 
       dataType: 'json', 
       data: JSON.stringify({key: "value"}), 
       success: function(data) { 
        options.success(data); 
       } 
      }); 
     } 
    } 
}); 

quindi associare alla griglia:

var grid = $("#grid").kendoGrid({ 
    dataSource: dataSource 
} 

In questo modo è possibile aggiungere il resto delle azioni CRUD al tuo trasporto e avrai tutto il tuo codice in un unico posto.

+0

Questa soluzione è ottima se è necessario il paging lato server, che richiede l'approccio ajax di trasporto. –

0

Estendere su Igorrious ... Quella risposta esatta non mi ha aiutato ma mi ha portato a una risposta.

cosa ha funzionato per me:

$.ajax(
    { 
    type: 'POST', 
    url: '/Controller/Action', 
    data: { 
     paramKey: paramValue 
    }, 
    success: function (result) { 
     $("#my-grid").data("tGrid").dataBind(result); 
    } 
}); 

Se questo non ti aiuta, fare un po 'javascript debug per scoprire il motivo per cui alcuni degli elementi a catena [$("#my-grid")] . [data("tGrid")] . [dataBind] hanno value == 'undefined'.

+0

Questo link è rotto – chiapa

+0

Tnx. L'ho rimosso, ma non sono riuscito a trovarne un altro per sostituirlo ... :( – ancajic

3

È possibile associare i risultati Json alla griglia. E anche tu puoi passare Model se ne hai bisogno. Vedi il frammento di codice qui sotto per esempio.

Vedere here per ulteriori dettagli.

$('#FindBtn').click(function (e) { 
    e.preventDefault(); 
    var UserDetails = 
    { 
     "FirstName": document.getElementById('FirstName').value, 
     "LastName": document.getElementById('LastName').value, 
    }; 
    $.ajax({ 
     url: "SearchJsonRequest", 
     type: 'POST', 
     contentType: "application/json;charset=utf-8", 
     data: JSON.stringify(UserDetails), 
     dataType: "json", 
     success: function (data) { 
      var grid = $('#AssociateSearch').getKendoGrid(); 
      grid.dataSource.data(data); 
      grid.refresh(); 
     } 
    }); 
    return false; 
}); 
Problemi correlati