7

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

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

我可以将node参数传递给refreshRows()函数,因为我正在通过forEachNode().

如何在不迭代的情况下按索引获取节点forEachNode()

4

5 回答 5

17

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

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

// 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);
于 2018-08-21T05:43:13.703 回答
11

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

var model = api.getModel();
console.log(model.getVirtualRow(idx));
于 2016-01-11T08:35:38.947 回答
3

基于@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();
},
于 2017-12-22T00:52:52.633 回答
1

如果您想逐行遍历网格以便可以使用它(其中 $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]);

其中 i 是您想要的行号。

于 2020-12-08T21:53:15.073 回答
-1

你不能。

这是因为网格旨在过滤/排序数据。因此,按索引工作并不意味着什么,并且本机不支持。

为什么需要刷新第 n 行?如果是因为用户操作,您可以捕获事件,获取节点并调用刷新。(链接到事件文档:http ://ag-grid.com/javascript-grid-events/index.php )

如果您没有太多数据(行/列),您可以调用全局刷新。

于 2016-01-11T08:00:24.347 回答