Oracle APEX 23.1交互式网格保存后更改列标记未消失且列不可编辑
Oracle APEX 23.1 交互式网格保存后红色标记残留&列不可编辑修复方案
针对你遇到的问题,可通过页面动态动作结合JavaScript实现无刷新修复,具体步骤如下:
1. 给目标交互式网格设置静态ID
编辑你的交互式网格属性,在高级标签页中设置静态ID(比如target_ig,自定义名称即可),确保后续JS能精准定位到这个IG,不会影响页面上的其他交互式网格。
2. 创建页面动态动作
- 触发条件配置:
选择事件为Interactive Grid - Save Success,选择类型为区域,然后选中目标IG所在的区域。 - 动作配置:
选择执行JavaScript代码,粘贴以下代码:
// 获取目标IG实例 const igInstance = apex.region('target_ig').widget().interactiveGrid('getViews','grid'); const igModel = igInstance.model; // 移除列标题的红色脏标记 igInstance.element.find('.aig-header-dirty').removeClass('aig-header-dirty'); // 遍历所有列,恢复可编辑状态并移除灰色样式 igModel.getColumns().forEach(col => { if (col.editable) { col.editable = true; igInstance.element.find(`[data-column="${col.name}"]`).removeClass('apex-disabled'); } }); // 重置IG内部的脏状态记录 igModel._dirtyRows = {}; igModel._dirtyFields = {}; igModel._newRows = []; // 刷新IG视图,应用状态变更(无页面刷新) igInstance.view$.grid('refresh');
3. 验证效果
添加新行并点击保存按钮,此时红色标记会自动消失,列也会恢复为可编辑的白色状态,全程无需刷新整个页面。
代码说明
.aig-header-dirty是APEX用于标记列存在脏数据的CSS类,移除该类即可消除红色标记;- 重置
_dirtyRows、_dirtyFields、_newRows是清除IG内部维护的脏状态数据,避免后续误判; - 调用
refresh()仅更新IG视图,不会触发页面整体刷新,完美适配多IG共存的页面场景。
内容的提问来源于stack exchange,提问作者Tien
相关产品推荐
相关产品推荐

