我在这个项目中使用了Ag-Grid和Angular,我想要做的就是设置快捷键,通过按下相关的键(‘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”值向行中添加一个类,只有我想要更改的行才会接收这个类。
我被难住了。我已经console.logged了这个函数中的所有东西,它们都返回了它们想要的值。该数组始终包含已选择的节点,并且updateRowData的返回值始终是该数组。我试着用getSelectedNodes和getSelectedRows替换掉'forEachNode‘,但都没有用。有什么想法吗?
发布于 2020-04-23 06:09:59
请试一下这个。
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
}https://stackoverflow.com/questions/55959087
复制相似问题