2012-06-28 7 views
12

私はページ上に日付ピッカーとグリッドを持っています。私はグリッドにdatepickerの日付に基づいて値を設定する必要があります。私は、grid.dataBindを使ってTelerikのmvcグリッドでこれを行いました。ajaxクエリからkendouiグリッドにデータをバインドする方法は?

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

今私は剣道のグリッドを除いて同じことをしたいと思います。私は$('#Grid').data('kendoGrid')を使ってグリッドを取得する必要があることを知っています。しかし、結果をグリッドにバインドするにはどうすればいいですか?

答えて

20

結果変数にはjavascriptオブジェクトの配列が含まれ、元のマークアップと同じ列数のデータが含まれているとします。

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

は、以下のことを試してみてください。

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

$( "#Grid")。data( "kendoGrid")。dataSource.fetch();行を追加すると、 dataSource.dataの直後(結果)、これは私のために働く。何らかの理由で、fetch()がなければ動作しません。ありがとう。 – Daniel

+0

@Danielグリッドに関連付けられたイベントリスナーはありますか?彼らは何かを防ぐことができますか?新しいデータを割り当てると実際にグリッド全体がリフレッシュされます。kendo.web.jsを実行すると、何が起こるかが正確にわかります。リフレッシュのために、データソース上で関数を取得または読み出すことができます。 – Igorrious

+2

@Daniel - フェッチ・ステートメントは、私が探していたものです。ありがとう! –

10

ます。また、このようにそれを行うことができます。

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

そして、グリッドにバインド:

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

追加することができますこの方法を残りのCRUDアクションはあなたのトランスポートに転送され、コードはすべて1か所にまとめられます。

+0

このソリューションは、トランスポートajaxのアプローチを必要とするサーバー側のページングが必要な場合に最適です。 –

0

Igorriousを拡張する...その正確な答えは私を助けなかったが、答えにつながる。

何が私のために働い:

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

を、これはあなたが、チェーン[$("#my-grid")] . [data("tGrid")] . [dataBind]内の要素のいくつかはvalue == 'undefined'を持っている理由を見つけるためにいくつかのJavaScriptのデバッグを行う解決しない場合。

+0

そのリンクは壊れています – chiapa

+0

Tnx。私はそれを削除したが、それを置き換える別のものを見つけることができなかった... :( – ancajic

3

グリッドにJson結果をバインドできます。また、必要に応じてモデルを渡すこともできます。たとえば、下記のコードスニペットを参照してください。

詳細はhereを参照してください。

$('#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; 
}); 
関連する問題