2013-06-18 37 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

你能否建议我解决多个领域的变化..我仍然堆积在同一问题上,谢谢 –