javascript - Ag-grid:使用“agSelectCellEditor”时清除单元格
问题描述
如 ag-grid文档中所述:
如果按下 Backspace 或 Delete,默认编辑器将清除单元格的内容。
但这在使用“agSelectCellEditor”时不起作用。如果按 Delete 或 Backspace,单元格将进入 EDIT 模式,您只能选择作为选项提供的值。
知道如何实现相同的行为吗?
解决方案
我发现一篇文章解释了如何编写删除单元格逻辑。这也适用于多个单元格。请查看这篇文章:https ://blog.ag-grid.com/deleting-selected-rows-and-cell-ranges-via-key-press/
基本上,您在我们的默认列定义中使用suppressKeyboardEvent回调覆盖 DELETE 或 BACKSPACE 键的默认行为:
defaultColDef: {
suppressKeyboardEvent: params => {
if (!params.editing) {
let isBackspaceKey = params.event.keyCode === 8;
let isDeleteKey = params.event.keyCode === 46;
if (isBackspaceKey || isDeleteKey) {
params.api.getCellRanges().forEach(range => {
let colIds = range.columns.map(col => col.colId);
let startRowIndex = Math.min(
range.startRow.rowIndex,
range.endRow.rowIndex
);
let endRowIndex = Math.max(
range.startRow.rowIndex,
range.endRow.rowIndex
);
clearCells(startRowIndex, endRowIndex, colIds, params.api);
}
}
return false;
}
}
和删除方法:
function clearCells(start, end, columns, gridApi) {
let itemsToUpdate = [];
for (let i = start; i <= end; i++) {
let data = gridApi.rowModel.rowsToDisplay[i].data;
columns.forEach(column => {
data[column] = "";
});
itemsToUpdate.push(data);
}
gridApi.applyTransaction({ update: itemsToUpdate });
}
这按预期工作。
推荐阅读
- javascript - 角延迟 mouseenter 事件仅在第一次工作
- django - 如何从多对多关系中获取所有对象?
- javascript - 使用 Express 和 express-basic-auth 包的基本身份验证。使用 javaScript 触发登录和注销
- magento2 - 使用 composer.json 安装 Magento 后安装 Magento Inventory
- html - 自定义按钮设计
- python - 仅将某些列名称转换为日期时间
- bootstrap-4 - 在 Bootstrap 4 上堆叠列和合并行
- c# - 自定义编辑器不允许拼写检查
- python - 如何通过在它们之间画线来连接两个 QGraphicsItem(使用鼠标)
- sql - ScalikeJDBC 如何通过聚合函数对查询进行排序?