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

Oracle APEX 24.2:如何在交互式网格指定行后插入新行?

Oracle APEX 24.2交互式网格:在指定记录后插入新行的解决方法

问题背景

在Oracle APEX 24.2的同一页面上有两个交互式网格:

  • Grid 1(master_grid):存储物料编码和需求数量
  • Grid 2(detail_grid):存储交付计划,支持按物料拆分数量

当用户在Grid 2中输入数量时,动态操作会将剩余余额拆分为新行。拆分功能正常,但新行始终出现在网格底部,而非当前行的正下方。

预期效果

Devp-9x16-40  4400   ← 原始行
Devp-9x16-40  600    ← 拆分行(应在此处)
10374-FF      1500   ← 原始行
10374-FF      500    ← 拆分行(应在此处)

实际效果

Devp-9x16-40  4400   ← 原始行
10374-FF      1500   ← 原始行
10374-FF      500    ← 位置正确
Devp-9x16-40  600    ← 位置错误,应在第1行之后

当前实现代码

var newId = model.insertNewRecord();
var newRec = model.getRecord(newId);
model.setValue(newRec, 'ARTICLECODE', artCode);
model.setValue(newRec, 'QTYTODELIVER', balance);

已尝试的方法

  • model.insertNewRecord(index):忽略index参数
  • model.moveRecords([newId], currentRecordId):抛出错误
  • model.copyRecords([curId]):抛出“未找到要复制的记录”错误

解决方案

在Oracle APEX 24.2中,可通过正确获取当前记录并使用moveRecords方法指定位置来实现预期效果,代码如下:

// 获取交互式网格的Grid视图与模型
var gridRegion = apex.region("detail_grid").widget().interactiveGrid("getViews", "grid");
var model = gridRegion.model;
var currentRecord = gridRegion.view$.grid("getCurrentRecord");

// 插入新记录并设置字段值
var newRecordId = model.insertNewRecord();
var newRecord = model.getRecord(newRecordId);
model.setValue(newRecord, 'ARTICLECODE', artCode);
model.setValue(newRecord, 'QTYTODELIVER', balance);

// 将新记录移动到当前记录的后方
model.moveRecords([newRecordId], currentRecord, { position: "after" });

关键说明

  1. 正确获取当前记录:通过grid.view$.grid("getCurrentRecord")确保拿到用户操作的当前行记录,而非仅ID
  2. moveRecords参数正确传递:第三个参数{ position: "after" }明确指定新记录插入到目标记录之后,避免因默认排序导致位置错误
  3. 模型与视图关联:必须从Grid视图中获取模型,确保操作的是当前交互的网格实例

内容的提问来源于stack exchange,提问作者Shah Jugnu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 07:17:28