jqWidget表格:根据行数据禁用/隐藏指定行复选框
解决方案:jqWidget表格根据行数据控制复选框显示/隐藏
核心思路
利用jqWidget的自定义渲染函数(行渲染或单元格渲染),根据每行数据中的disableCheckbox字段值,动态控制复选框DOM元素的显示状态。
方法1:通过rowRenderer全局控制行内复选框
直接重写行的渲染逻辑,修改默认生成的复选框元素样式:
$("#jqxGrid").jqxGrid({ width: '100%', height: '600px', source: dataAdapter, // 你的数据源适配器 selectionmode: 'checkbox', columns: [ { text: 'ID', datafield: 'id', width: 80 }, { text: '名称', datafield: 'name', width: 150 }, // 其他列配置... ], rowRenderer: function(row, data) { // 获取默认行HTML结构 let rowHtml = this.defaultRowRenderer(row, data); // 根据disableCheckbox值处理复选框 if (data.disableCheckbox === true) { // 替换复选框元素为隐藏状态 rowHtml = rowHtml.replace('<div class="jqx-grid-checkbox"></div>', '<div class="jqx-grid-checkbox" style="display: none;"></div>'); } return rowHtml; } });
方法2:针对复选框列使用cellRenderer
自定义复选框列的单元格渲染逻辑,更精准控制:
$("#jqxGrid").jqxGrid({ width: '100%', height: '600px', source: dataAdapter, selectionmode: 'checkbox', columns: [ // 自定义复选框列 { text: '', datafield: '', width: 50, cellRenderer: function(row, columnfield, value, defaulthtml, columnproperties, rowdata) { // 判断当前行是否需要隐藏复选框 if (rowdata.disableCheckbox === true) { return '<div style="display: none;"></div>'; } else { // 返回默认复选框HTML return defaulthtml; } } }, // 业务列配置 { text: 'ID', datafield: 'id', width: 80 }, { text: '名称', datafield: 'name', width: 150 }, ] });
补充注意事项
- 数据类型兼容:如果你的
disableCheckbox是字符串类型(如"true"/"false"),需要将判断条件改为rowdata.disableCheckbox === "true" - 禁止选中兜底:若隐藏复选框后仍需确保该行无法被选中,可添加行选中事件拦截:
$("#jqxGrid").on('rowselect', function(event) { const rowdata = event.args.row; if (rowdata.disableCheckbox === true) { $("#jqxGrid").jqxGrid('unselectrow', event.args.rowindex); } });
内容的提问来源于stack exchange,提问作者Abdelmajid Hafidi
相关产品推荐
相关产品推荐

