如何隐藏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
相关产品推荐
相关产品推荐

