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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:23:10