@Poul 的先前回答可能会有所帮助,但如果这不起作用,您也可以使用(请参阅此处onBeforeEditCell
的完整网格事件)。我有时会使用此事件来取消编辑器(当我创建通用编辑器但某些单元格由于动态执行的特定逻辑而无法编辑时),如果您返回该事件,则永远不会创建编辑器。false
所以例如
<angular-slickgrid gridId="grid29"
[columnDefinitions]="columnDefinitions"
[gridOptions]="gridOptions"
(onBeforeEditCell)="verifyCellIsEditableBeforeEditing($event)">
</angular-slickgrid>
verifyCellIsEditableBeforeEditing(event) {
const eventData = event?.detail?.eventData;
const args = event?.detail?.args;
if (args && args.column && args.item) {
// your logic here
if (... logic for not editable...) {
event.preventDefault();
eventData.stopImmediatePropagation();
return false;
}
}
}
因此,您可以结合使用(onClick)
with(onBeforeEditCell)
并使其正常工作。在我们的项目中,有一个列(用户)将路由到另一个 SPA 页面,为此我使用`onClick)
handleOnCellClick(event, args) {
const grid = args.grid;
const rows = args.rows || [];
const selectedUser = grid && grid.getDataItem(args.row) as User;
const columnDef = grid && grid.getColumns()[args.cell];
const field = columnDef && columnDef.field || '';
// when clicking on any cell, we will make it the new selected row except on 1st column (field "sel")
// we don't want to interfere with multiple row selection checkbox which is on 1st column cell
switch (field) {
case 'sel':
// multiple selection(s)
this.closeSidebar();
this.selectedUser = null;
break;
case 'userNumber':
const url = `/users/${user.userNumber}`;
if (event.ctrlKey || event.shiftKey) {
const openUrl = this.location.prepareExternalUrl(url);
window.open(openUrl, '_blank');
} else {
this.router.navigateByUrl(url);
}
break;
default:
// clicked anywhere else, turn into a single selection and open quick view sidebar
grid.setSelectedRows([args.row]);
this.userIdSelected = selectedUser.id;
this.openSidebar();
break;
}
}
有关更完整的代码示例,您可以查看我写的另一个 Stack Overflow答案。