You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Slickgrid 如何动态禁用checkboxSelector的selectableOverride行选功能

实现方案

现有代码问题

  • 直接在selectableOverride中返回false会禁用所有行的选择功能,不符合仅禁用已选中行的需求
  • 调用setOptions更新配置后未触发行重绘,界面不会立刻更新禁用状态

正确实现步骤

  1. 点击禁用按钮时先获取当前已选中的行数据标识,在selectableOverride回调中对每行做判断:已选中的行返回false(不可选),未选中的行返回true(保持可选)
  2. 更新配置后调用invalidateAllRows方法重绘所有行,让禁用状态立刻生效

完整代码示例

// 存储已选中行的唯一标识集合,假设你的行数据用id作为唯一键
selectedRowIds = new Set<number>();

disableButtonClick() {
  // 第一步:获取当前已选中的所有行数据,收集唯一标识
  const selectedItems = this.gridObj.getSelectedRows();
  selectedItems.forEach(item => this.selectedRowIds.add(item.id));

  // 第二步:更新grid配置
  this.gridObj.setOptions({
    checkboxSelector: {
      selectableOverride: (row: number, dataContext: any, grid: any) => {
        // 已选中的行返回false,禁用选择/取消操作
        return !this.selectedRowIds.has(dataContext.id);
      }
    }
  });

  // 第三步:重绘所有行,立刻更新复选框禁用状态
  this.gridObj.invalidateAllRows();
}

// 如果需要恢复所有行可选,调用以下方法即可
enableAllRows() {
  this.selectedRowIds.clear();
  this.gridObj.setOptions({
    checkboxSelector: {
      selectableOverride: null
    }
  });
  this.gridObj.invalidateAllRows();
}

效果说明

配置生效后,之前选中的行复选框会变为不可点击状态,用户无法取消这些行的选中,未选中的行仍然可以正常勾选。


内容的提问来源于stack exchange,提问作者Ranjith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:39:01