Dgrid对具有一列的数据源执行更新

时间:2014-04-02 16:06:22

标签: javascript dojo dgrid

我有一个只有一列数据(名称)的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}); 

2 个答案:

答案 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