我有一个单一的slickgrid,它使用带有行选择模型的数据视图。我经常为数据视图分配一个完全不同的数组,切换此网格中的数据。
我使用此函数交换网格中的数据集:
function setData(dataArray, uniqueIdFieldName) {
dataView.beginUpdate();
dataView.setItems(dataArray, uniqueIdFieldName)
dataView.endUpdate();
grid.resizeCanvas();
grid.invalidate();
}
我第一次使用此功能(将初始数据加载到空网格中),一切都很好。每次之后,它都会加载数据,但有一个选择错误。我无法选择网格中的第一行。但是,如果我选择除第一行之外的行,则该错误似乎会自行纠正,然后我可以再次选择第一行。当我用我的函数再次更改数据时,我再次无法选择第一行。
任何人都知道为什么会这样吗?
答案 0 :(得分:0)
我发现了问题和解决方案。问题是,即使在使用setItems()完全更改数据之后,slickgrid仍会保留有关活动单元格/行的所有数据。内部变量activeCell仍设置为索引值,即使不再选择单元格也是如此。解决方案是在更改数据之前调用grid.resetActiveCell()。所以工作代码如下所示:
function setData(dataArray, uniqueIdFieldName) {
grid.resetActiveCell(); //THIS LINE ADDED
dataView.beginUpdate();
dataView.setItems(dataArray, uniqueIdFieldName)
dataView.endUpdate();
grid.resizeCanvas();
grid.invalidate();
}
在我看来,这是slickGrid中的一个错误。 setItems()函数应该在更改行之前在内部重置选择变量,因为显然当前选择在重置项目后将变为null和void,而不这样做会使整个选择模型处于错误状态。