我有一个只有一列数据(名称)的dgrid但是我试图在此列上执行更新并且它会继续插入新记录。我知道它会将输入的信息视为新记录,因为dgrid中的 idProperty 是名称。如何解决此问题并能够在不执行新更新的情况下更新所选列。
我也理解dgrid没有实现行索引的概念。以下是我的代码:
Dgrid
var nameStore = new dojo.store.Observable(new Memory({data: data, idProperty:"name"}));
var nameGrid = new CustomNameGrid ({
store: nameStore,
columns: {
chkBox:selector({}),
Name:{
label:"Names",
field:"name"
}
} ,
selectionMode:"none",
loadingMessage: "Loading data...",
noDataMessage: "No results found....",
allowSelectAll: true
}, "nameGrid");
数据
var data = [{name:"ABC"},
{ name:"DEFG"},
{ name:"HIJK LMNOP"}];
更新功能
单击更新按钮后会触发更新功能,除了插入新行而不是更新所选行之外,该功能正常工作。更新函数中的主要语句是
var userEnteredName = document.getElementById('nameEntered').value
aliasStore.put({name:userEnteredName});
答案 0 :(得分:3)
在您的数据中添加id
字段,然后从内存存储中删除idProperty
或将其设置为" id"。如果要更新行,请使用所选行中的ID并将name
设置为新值。
nameStore.put({id:selectedRowId, name: userEnteredName});
当您生成主键而不是使用业务数据时,生活会更好,因为当业务数据需要更改时会遇到问题。
答案 1 :(得分:1)
如果您使用Memory store来支持dgrid数据)检查在现有行上执行更新时使用的put指令,请查看Dojo PutDirectives API以获取详细信息。
在执行overwrite
?
put()
设置为true