【问题标题】:Ag-grid not keeping row focus on table refreshAg-grid 没有将行重点放在表刷新上
【发布时间】:2018-09-23 02:27:12
【问题描述】:

我有一个 ag-grid 表,它每隔几秒刷新一次数据。每当它这样做时,选定的表格行就会失去焦点,我试图找出一种方法来强制焦点回来。我认为这就像跟踪所选节点一样简单,然后在刷新发生时设置值,但它似乎不起作用。基本上,每当用户在表格中进行选择时,我都会跟踪节点和焦点单元格:

function onSelectionChanged() {
    var selectedRowNode = $scope.ResourceCheckoutTableGrid.api.getSelectedNodes()[0];
    $scope.focusedCell = $scope.ResourceCheckoutTableGrid.api.getFocusedCell();
    $scope.selectedRowNode = selectedRowNode;   
}

然后,我每三秒加载一次表格数据:

$scope.startRefresh = function() {
    setInterval(function() {
        $scope.loadTableData();
    },3000)
}

重新加载表格数据时,它会失去焦点,但我尝试使用保存的值将其恢复:

$scope.loadTableData = function() {
    $http.get('RobotDataInterface/Resource/getAllCheckedOutResources').success(
            function(data) {
                $scope.rowCount = data.length;
                if ($scope.ResourceCheckoutTableGrid.api != undefined) {
                    $scope.ResourceCheckoutTableGrid.api.setRowData(data);
                    $scope.ResourceCheckoutTableGrid.api.sizeColumnsToFit();
                    var node = $scope.selectedRowNode;
                    var cell = $scope.focusedCell;
                    if (node != "" && cell != "") {
                        node.setSelected(true);
                        $scope.ResourceCheckoutTableGrid.api.setFocusedCell(cell.rowIndex, cell.column);
                    }
                }
            }); 
};

如果我设置断点,我可以看到当它进行这些调用时:

node.setSelected(true);
$scope.ResourceCheckoutTableGrid.api.setFocusedCell(cell.rowIndex, cell.column);

我可以看到这些值是我所期望的;节点和焦点单元格、rowIndex 等是我所期望的,但所选行仍然失去焦点(即使它实际上确实设置为 'selected = true'。有谁知道我做错了什么?

【问题讨论】:

  • setFocusedCell(cell.rowIndex, cell.column) 应该是 setFocusedCell(cell.rowIndex, cell.column.colId) ..它应该 colId 而不是 column 或使用 cell.column.getColId()
  • @NagaSaiA 谢谢,这让我更进一步 - 它现在似乎保留了单元格焦点(即使在刷新后单元格也会突出显示)但是被突出显示的行永远不会回来,只是单元格,如果这有意义吗?
  • 能否请您将其更具体或截图以方便调试?
  • @NagaSaiA 其实我好像打错了电话,我会更新答案,谢谢你的帮助!
  • 我已将我的评论作为设置焦点的答案发表,如果对您有帮助请标记为答案

标签: javascript angularjs ag-grid


【解决方案1】:

为了达到预期的效果,在 setFocusedCell 方法中将 cell.column 更改为 cell.column.colId

【讨论】:

    【解决方案2】:

    好的,看起来这适用于我想做的事情;而不是单元格焦点,我需要将节点本身设置为 selected = true ...我可以发誓我之前已经这样做了,甚至验证了它已将 selected 设置为 true,但无论哪种方式,这段代码都能实现预期的结果:

                        $scope.ResourceCheckoutTableGrid.api.forEachNode((node) => {
                            if (node.childIndex === ($scope.selectedRowNode.childIndex)) {
                                node.setSelected(true);
                                return;
                            }
                        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-30
      • 2018-05-31
      • 2019-04-03
      • 1970-01-01
      • 2017-11-15
      • 2022-10-14
      • 2016-05-20
      • 2019-08-06
      相关资源
      最近更新 更多