ag-grid - AG-Grid: updateRowData({update: ItemsArray}) 影响所有行而不是选定行
问题描述
我在这个项目中使用 Ag-Grid 和 Angular,我想要做的是设置快捷键以通过按下关联键来更改所选行的“状态”值(“1”=“状态完成”, ETC。)。有一个名为的内置函数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
需要 2 个参数,第一个是它正在执行的更新类型(添加、删除、更新),在我的情况下,我使用的是后者,以及要更改的行数组。
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});
}
但是,当我按下一个键来更改行值时,它会更新网格中的每一行。更奇怪的是,我有一个方法可以根据“状态”值向行添加一个类,并且只有我打算更改的行接收该类。
我难住了。我已经 console.logged 这个函数中的所有内容,它们都返回了它们的预期值。该数组始终包含已选择的节点,并且 updateRowData 的返回值始终是同一个数组。我尝试过切换“forEachNode”getSelectedNodes
但getSelectedRows
无济于事。有任何想法吗?
解决方案
请试试这个。
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
}
推荐阅读
- java - 如何转换列表
在Java中没有“”的逗号分隔字符串 - python - 在 Python 中将 20 列聚合为一列的更快方法
- c - 为什么“传递不兼容指针类型的参数”警告
- sql - 在 Postgres 中继承独特约束的最佳解决方法是什么?
- html - Angular 6 - 从 httpClient 获取 csv 响应
- javascript - 量角器 if else 语句与期望
- video - Microsoft Media Foundation / UVC ReadSample() 回调
- date - 表示为年、月、日的两个日期之间的差异(在一列中)
- node.js - RSA 使用错误的私钥成功解密
- laravel - Laravel Socialite facebook 登录:无法加载 URL:此 URL 的域不包含在应用程序的域中