Oracle Apex交互式网格(IG)统计行数时如何排除标记删除行?
Oracle Apex交互式网格(IG)排除标记删除行的计数方案
完全可行,以下是几种直接落地的实现方案:
方案1:修改模型订阅的计数逻辑
直接在模型订阅的回调中过滤掉标记删除的行,使用IG内置API判断行状态:
// 替换为你的IG静态ID和页面项名称 var ig = apex.region("IG_EMPLOYEES").widget(); var gridModel = ig.interactiveGrid("getViews", "grid").model; // 过滤出未被标记删除的行 var validRows = gridModel.getRecords().filter(row => !gridModel.isDeleted(row)); // 更新页面项计数 apex.item("P1_ROW_COUNT").setValue(validRows.length);
gridModel.isDeleted(row)是IG原生方法,准确识别前端标记为删除的行,无论是否提交到数据库都能生效。
方案2:监听IG行操作事件实时计算
通过监听IG的行增删/恢复事件,每次操作后重新统计有效行数:
// 绑定IG的行操作事件 $(document).on("apexafterrowdelete apexafterrowadd apexafterrowundelete", "#IG_EMPLOYEES", function() { var ig = apex.region("IG_EMPLOYEES").widget(); var gridModel = ig.interactiveGrid("getViews", "grid").model; // 统计未删除行数量 var validCount = gridModel.getRecords().reduce((total, row) => { return total + (gridModel.isDeleted(row) ? 0 : 1); }, 0); apex.item("P1_ROW_COUNT").setValue(validCount); });
这种方式能覆盖所有行状态变更场景,确保计数实时同步。
方案3:数据库层面的静态计数(适合已提交数据)
如果仅需统计已保存到数据库的有效行,可以创建一个SQL计算类型的页面项,查询时过滤删除标记:
SELECT COUNT(*) FROM YOUR_TABLE WHERE IS_DELETED = 'N' -- 替换为你的删除标记字段逻辑 -- 若有页面条件,可添加对应过滤条件 AND DEPARTMENT_ID = :P1_DEPARTMENT_ID
然后通过动态动作,在IG数据提交后刷新该页面项即可。
注意事项
- 前两种JavaScript方案支持前端未提交的临时行计数,完全匹配你描述的业务场景;
- 替换代码中的
IG_EMPLOYEES为你的交互式网格静态ID,P1_ROW_COUNT为目标页面项名称。
内容的提问来源于stack exchange,提问作者Pavle Vasiljevic
相关产品推荐
相关产品推荐

