Ag grid AG Grid:updateRowData({update:ItemsArray})影响所有行而不是选定行

Ag grid AG Grid:updateRowData({update:ItemsArray})影响所有行而不是选定行,ag-grid,ag-grid-angular,Ag Grid,Ag Grid Angular,我正在为这个项目使用Ag Grid和ANGLANG,我正在尝试设置快捷键,通过按相关键(“1”=“Status complete”等)来更改选定行的“Status”值。有一个名为onCellKeyPress()的内置函数,用于在选择一行或多行后侦听击键。这工作得很好,我有一个开关盒,根据按下哪个键发送一个值,如下所示: onCellKeyPress = (e: any) => { switch(e.event.key) { case '0': this.rowUpd

我正在为这个项目使用Ag Grid和ANGLANG,我正在尝试设置快捷键,通过按相关键(“1”=“Status complete”等)来更改选定行的“Status”值。有一个名为
onCellKeyPress()
的内置函数,用于在选择一行或多行后侦听击键。这工作得很好,我有一个开关盒,根据按下哪个键发送一个值,如下所示:

  onCellKeyPress = (e: any) => {
    switch(e.event.key) {
      case '0': this.rowUpdates('New'); break;
      case '1': this.rowUpdates('Completed'); break;
      case '2': this.rowUpdates('Needs Attention'); break;
      case '3': this.rowUpdates('Rejected'); break;
    }
  }
它向我的自定义函数
rowUpdates()
发送一个字符串,该字符串接受该值,遍历现有节点,查找任何选定节点,对选定节点设置值,并将它们推送到数组中

现在麻烦就从这里开始了
updateRowData
接受两个参数,第一个是它正在执行的更新类型(添加、删除、更新),在我的例子中,我使用后者,以及要更改的行数组

  rowUpdates = (value: String) => {
    let itemsToUpdate = [];
    this.gridOptions.api.forEachNode(rowNode => {
      if(rowNode.isSelected() === true) {
        const selected = rowNode.data;
        selected.status.name = value;
        itemsToUpdate.push(selected);
        console.log(itemsToUpdate);
      }
    });
    this.gridOptions.api.updateRowData({update: itemsToUpdate});
  }

但是,当我按键更改行值时,它会更新网格中的每一行。更奇怪的是,我有一个方法,它根据“Status”值向行中添加一个类,并且只有我想要更改的行接收该类

我被难住了。我已经在这个函数中记录了所有内容,它们都返回了它们的预期值。数组始终包含已选择的节点,并且updateRowData的返回值始终为同一数组。我尝试用
getSelectedNodes
getSelectedRows
切换出“forEachNode”,但没有效果。有什么想法吗?

请试试这个

updateItems(value: String) {
    var itemsToUpdate = [];
    this.gridApi.forEachNodeAfterFilterAndSort(function(rowNode, index) {
      if (!rowNode.selected) {
        return;
      }
      var data = rowNode.data;
      data.status.name = value;
      itemsToUpdate.push(data);
    });
    var res = this.gridApi.updateRowData({ update: itemsToUpdate });
    this.gridApi.deselectAll();//optional
  }

检查是否使用客户端行模型,因为其他模型(如服务器端或无限行)不支持事务更新。还打印调用updateRowData返回的数据。这可能会有帮助。文档告诉我客户端行模型是默认设置,我没有明确更改它。我尝试按照更新数据功能部分中的示例添加打印功能,但没有效果。谢谢你的想法!注意,doc()声明“在幕后,网格将调用rowNode.setRowData(newData)”。但是setRowData会更新整个网格。这是令人困惑的。您需要陈述一个与代码相关的问题。因此,请您说明代码所指的问题,好吗?“当我按一个键更改行值时,它会更新我网格中的每一行”修复以单独更新所选行。