【问题标题】:Can't select the first row in a slickgrid after changing its data更改数据后无法选择 slickgrid 中的第一行
【发布时间】:2013-02-19 17:42:51
【问题描述】:

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

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

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

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

有人知道为什么会这样吗?

【问题讨论】:

    标签: slickgrid


    【解决方案1】:

    我找到了问题和解决方案。问题是 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() 函数应该在更改行之前在内部重置选择变量,因为显然当前选择在重置项目后将是无效的并且不这样做会使整个选择模型处于错误状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 2015-09-21
      • 2015-10-10
      • 2016-04-07
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多