如何在ag网格中通过索引获取节点

How to get a node by index in ag-grid?

本文关键字:索引 获取 节点 ag 网格      更新时间:2023-09-26

AgGrid希望将节点传递给它的许多数据函数。如何通过索引获取节点?看看下面的截图:

api.forEachNode(function(node){
   api.refreshRows([node]);
})

我可以将node参数传递给refreshRows()函数,因为我是通过forEachNode()获得它的。

如何在不迭代forEachNode()的情况下通过索引获得节点?

这个问题可能有点晚了,但无论如何,对于未来正在搜索这个问题的人来说:

除了给出的答案外,您还可以通过以下方式获得行节点,

// Getting the row node by the row index
cont rowNode1 = api.getDisplayedRowAtIndex(rowIndex);

在某些情况下,上述方法不适用,因为当您对网格进行一些更改(排序、筛选等)时,rowIndex可能会发生更改。
另一种方法是使用行的id,即使排序、筛选。。。网格。

getRowNode(id):返回具有给定id的行节点。行节点id是您提供的回调getRowNodeId(data),否则,id是设置行数据时网格自动生成的数字。

// Getting rowNode by row id
const rowNode2 = api.getRowNode(rowId);

您可以使用getVirtualRow()方法来获取单行。此函数是行模型的一部分。您可以通过getModel()函数获得行模型。

var model = api.getModel();
console.log(model.getVirtualRow(idx));

基于@Charlie H的回答,API完全有可能在他使用的版本之后发生了一些变化。我使用的是(截至2017年12月的当前版本)15.0。我发现rowsToDisplay[]包含一个可访问的行数组。例如,下面的操作正是你所认为的:

onCellEditingStarted: function (event) {
    var displayModel = gridOptions.api.getModel();
    var rowNode = displayModel.rowsToDisplay[event.rowIndex];
    rowNode.setRowHeight(100);
    gridOptions.api.onRowHeightChanged();
},

如果你想逐行迭代网格,你可以使用这个(其中$scope.grid是你的网格名称):

        $scope.high_index = 0;
        $scope.rows = [];
        $scope.grid.api.forEachNode(function (node) {
            $scope.rows[node.childIndex] = node.id;
            if (node.childIndex > $scope.high_index)
                $scope.high_index = node.childIndex;
        });
        for (i = 0; i <= $scope.high_index; i++) {
            var node = $scope.grid.api.getRowNode($scope.rows[i]);
        }

或者,如果您想要按子索引的行节点,现在可以使用(在上面设置$scope.rows之后):

       var node = $scope.grid.api.getRowNode($scope.rows[i]);

我是你想要的行号。