我目前正在使用Dojo EnhancedGrid与分页,过滤和单元格版本。
问题是在一个页面中,我需要在编辑单元格时更新另一个值。当我更新此值时,我松开了所选的单元格,因此我需要单击下一个单元格以选择它并进行修改。 这是不可能进入/编辑/输入/关闭/输入/编辑(Excel喜欢版本)。
以下是我的代码的一部分:
var store = new dojo.data.ItemFileWriteStore({'data':data});
var grid = new dojox.grid.EnhancedGrid({
id: 'grid',
store: store,
structure: structure,
columnReordering: true,
autoHeight: true,
autoWidth: true,
initialWidth: '100%',
escapeHTMLInData: false,
plugins: {
pagination: {
pageSizes: ["10", "25", "50", "All"],
description: true,
sizeSwitch: true,
pageStepper: true,
gotoButton: true,
maxPageStep: 4,
position: "bottom"
},
filter : {}
},
onStartEdit: function(inCell, inRowIndex)
{
item = grid.selection.getSelected()[0];
currentVal = item[inCell['field']][0];
},
doApplyCellEdit: function(inValue, inRowIndex, inAttrName) {
if(inValue != currentVal){
[...]
$.ajax(url, data, {
success:function(data, textStatus) {
val = parseInt(data["info"]);
if(!isNaN(val)) {
grid.store.setValue(item, 'info', val);
grid.update();
} else {
grid.store.setValue(item, 'info', 0);
grid.update();
}
}
});
}
}
});
dojo.byId("gridDiv").appendChild(grid.domNode);
grid.startup();
您是否看到任何解决方案来处理此问题?
答案 0 :(得分:0)
我也使用增强的dojo网格,我遇到了类似的问题。我用这个来重新加载数据:
require(["dijit/registry"],function(registry) {
var grid = registry.byId('grid');
grid._lastScrollTop=grid.scrollTop;
grid._refresh();
});
有了这个,你总是得到你操纵的最后一行,最后也是你最后选择的一行......。
答案 1 :(得分:0)
经过多次研究,我找到了以下解决方案:
$.ajax(url, data, {
success:function(data, textStatus) {
val = parseInt(data["info"]);
if(!isNaN(val)) {
grid.store.setValue(item, 'info', val);
grid.update();
window.setTimeout(function() {
grid.focus.next();
}, 10);
} else {
grid.store.setValue(item, 'info', 0);
grid.update();
window.setTimeout(function() {
grid.focus.next();
}, 10);
}
}
});
需要定时器,因为在网格更新之前有一个短暂的延迟,从而失去焦点。