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

如何隐藏DevExpress dxTreeList中父节点的复选框?

解决dxTreeList父节点复选框隐藏问题(jQuery+DevExpress)

针对你的需求,无需重构现有保存机制,仅通过内置事件即可实现父节点复选框隐藏,具体方案如下:

核心思路

利用dxTreeList的onCellPrepared和onEditorPreparing两个内置事件,在节点渲染和编辑触发时,判断目标列与父节点身份,隐藏或禁用复选框控件,完全保留原有批量编辑与数据绑定逻辑。

代码实现

修改你的dxTreeList配置,添加两个事件处理函数:

$("#treeList").dxTreeList({
    dataSource: dataForControls,
    id: "id",
    parentId: "parentId",
    editing: {
        mode: "batch",
        allowAdding: false,
        allowUpdating: true,
        allowDeleting: false,
    },
    columns: [
        { dataField: "pageName", caption: "Page / Control", allowEditing: false },
        { dataField: "pageAccess", caption: "Has Access", allowEditing: true, dataType: "boolean" }
    ],
    // 单元格渲染完成后处理
    onCellPrepared: function(e) {
        // 匹配目标列,且当前节点是父节点(包含子节点)
        if (e.column.dataField === "pageAccess" && e.node.hasChildren) {
            // 隐藏复选框控件
            e.cellElement.find(".dx-checkbox").hide();
            // 禁用单元格点击,防止触发编辑状态
            e.cellElement.css("pointer-events", "none");
        }
    },
    // 编辑器准备时处理
    onEditorPreparing: function(e) {
        // 匹配目标列、数据行,且当前节点是父节点
        if (e.dataField === "pageAccess" && e.parentType === "dataRow" && e.node.hasChildren) {
            // 取消编辑器创建,避免父节点进入编辑状态
            e.cancel = true;
            // 可选:给父节点单元格添加提示文本
            e.cellElement.text("不可设置");
        }
    }
});

方案说明

  • 无需替换内置复选框为自定义模板,完全沿用原有布尔列的数据绑定逻辑,保存机制不受影响。
  • onCellPrepared负责处理视图状态下的复选框隐藏,禁用点击事件防止误触发编辑。
  • onEditorPreparing负责拦截编辑请求,避免父节点弹出编辑框,保证交互一致性。
  • 判断父节点的依据是e.node.hasChildren,如果你的数据中父节点用parentId为null/0标识,也可以替换为!e.data.parentId来判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:47:21