2013-06-18 65 views
3

我有一個4列名稱,年齡,集合,利潤的網格。但是,當我嘗試設置一個數字列時,它並不反映在網格上。Kendo Ui Grid - dataItem.set()方法無法正常工作

schema: 
{ 
    model:{ 
     fields:{ 
      name:{type:"string"}, 
      age:{type:"number"}, 
      collection: { type:"number", defaultValue:0.00}, 
      profit: { type:"number", defaultValue:0.00} 
     } 
    } 
} 

此代碼的工作完美:

var grid = $("#grid").data("kendoGrid"); 
var data = grid.dataSource.at(0); 
data.set("name", "John Doe"); 

但我想更新數字列:

var grid = $("#grid").data("kendoGrid"); 
var data = grid.dataSource.at(0); 
var collectionVal = 50000; 
data.set("collection", collectionVal); 

而且它沒有更新,因爲列的類型是 「數字」。

UPDATE:

pageable: 
{ 
    refresh : true, 
    pageSizes: true 
}, 
edit: function(e) 
{ 
    $('input[name="age"]').blur(function() 
    { 
     mygrid = $("#grid").data("kendoGrid"); 
     selectedRow = mygrid.select(); 
     dataItem = mygrid.dataItem(selectedRow); 

     dataItem.collection = dataItem.age * dataItem.profit; 
     dataItem.set("collection", dataItem.collection); 
    }); 
} 
+1

它工作得很好,在這裏檢查http://jsfiddle.net/OnaBai/MWvKc/ – OnaBai

+0

@OnaBai謝謝,它完美的作品..還有一件事,我不想按鈕來設置價值,所以當用戶更改年齡時,您可以幫助我設置集合=(年齡*利潤)。看到更新的代碼:) –

回答

5

而是在edit定義的blur處理器更新collection的,在你的網格定義save事件處理程序如下:

pageable : { 
    refresh : true, 
    pageSizes: true 
}, 
save  : function (e) { 
    var profit = e.values.profit || e.model.profit; 
    var age = e.values.age || e.model.age; 
    this.dataSource.getByUid(e.model.uid).set("collection", age * profit); 
} 
+0

非常感謝,似乎我沒有基本知識..它工作:)甚至我正在爲網格的動態字段,「從數據庫中提取行並使用它們作爲列」 –

+0

需要再次解決方案,此代碼不更新多個列..如果我想一次更新3行需要什麼更改? –

+0

你能否建議我解決多個領域的變化..我仍然堆積在同一問題上,謝謝 –