如何通过ag-grid中的索引获取节点?

时间:2016-01-11 06:20:04

标签: javascript angularjs ag-grid

AgGrid希望将节点传递给它的大量数据函数。你如何通过索引获得节点?看下面的剪辑:

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

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

如何通过索引获取节点而不迭代forEachNode()

5 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

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

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

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

在某些情况下,上述方法不适用,因为在对网格进行某些更改(排序,过滤器等)时,rowIndex可能会更改。
另一种方法是使用该行的ID,即使您对网格进行排序,过滤...也不会更改。

  

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

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

答案 2 :(得分:1)

在@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();
},

答案 3 :(得分:0)

你不能。

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

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

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

答案 4 :(得分:0)

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

我要的行号在哪里。