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" });
关键说明
- 正确获取当前记录:通过
grid.view$.grid("getCurrentRecord")确保拿到用户操作的当前行记录,而非仅ID - moveRecords参数正确传递:第三个参数
{ position: "after" }明确指定新记录插入到目标记录之后,避免因默认排序导致位置错误 - 模型与视图关联:必须从Grid视图中获取模型,确保操作的是当前交互的网格实例
内容的提问来源于stack exchange,提问作者Shah Jugnu
相关产品推荐
相关产品推荐

