0

我有一个使用带有行选择模型的数据视图的 slickgrid。我经常为数据视图分配一个完全不同的数组,在这个网格中切换数据。

我使用这个函数来交换网格中的数据集:

function setData(dataArray, uniqueIdFieldName) {
    dataView.beginUpdate();
    dataView.setItems(dataArray, uniqueIdFieldName)
    dataView.endUpdate();
    grid.resizeCanvas();
    grid.invalidate();  
}

我第一次使用此功能(将初始数据加载到空网格中)时,一切正常。此后每次都可以正常加载数据,但有一个选择错误。我无法选择网格中的第一行。但是,如果我选择第一行以外的行,错误似乎会自行纠正,然后我可以再次选择第一行。当我再次使用我的函数更改数据时,我再次无法选择第一行。

有谁知道为什么会这样?

4

1 回答 1

0

我找到了问题和解决方案。问题是 slickgrid 保留了有关活动单元格/行的所有数据,即使您使用 setItems() 完全更改了它的数据。即使不再选择任何单元格,内部变量 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() 函数应该在更改行之前在内部重置选择变量,因为显然当前选择在重置项目后将是无效的,并且不这样做会使整个选择模型处于错误状态。

于 2013-02-20T00:49:29.687 回答