oracle 如何在按下“添加行”按钮时默认为单行视图

k97glaaz  于 2023-05-16  发布在  Oracle
关注(0)|答案(2)|浏览(145)

我正在使用Oracle Apex 22.2开发应用程序。该页面具有交互式网格。用户可以在不同的单元格中输入信息。问题是他们输入的10个字段中有4个是文本字段,他们提到在单行视图中输入数据对他们来说更容易。我希望当用户按下添加行按钮时,它会添加行并立即转到单行视图。如果可能的话,当用户单击保存如果他们返回到报告视图就更好了。
到目前为止,我所管理的几乎是我所需要的。覆盖selection-add-row所做的事情允许我在单击AddRow按钮后打开单行视图。但是,它不是打开空白记录的单行视图,而是打开交互式网格中第一条记录的单行视图。
这被放置在初始化JavaScript函数中。

function(config) { 
config.initActions = function( actions ) {
  actions.remove('selection-add-row');
  actions.add({
    name: "selection-add-row",
    label: "Add row",
    iconBeforeLabel: "true",
    action: function(event, focusElement) {
      let model = $(actions.context).interactiveGrid('getCurrentView').model;
        model.insertNewRecord();
        $(actions.context).interactiveGrid('getActions').invoke("single-row-view");
    }
  });
}
return config;}

这两行在开头插入记录。

let model = $(actions.context).interactiveGrid('getCurrentView').model;
model.insertNewRecord();

这一行打开单行视图,但仅在交互式网格中存在的第一条记录上。

$(actions.context).interactiveGrid('getActions').invoke("single-row-view");

如果我关闭单行视图并再次单击添加行,它会创建一个新的空白行,但它会打开前一个空白行的单行视图。
我一直在阅读文档,但显然有一些东西我没有得到。

yrwegjxp

yrwegjxp1#

您所描述的听起来像是新行的“普通”表单,但却是更新行的IG,那么为什么不以这种方式实现它呢?

  • 将交互式网格中的“添加行”属性设置为false,这样用户就不能在IG中添加新行(如果您仍然希望允许复制行,则可以隐藏按钮)。
  • 在同一表上创建具有窗体区域的新页。理想的页面类型对话框
  • 添加“添加行”按钮以重定向到表单页面。
  • 添加对话框关闭操作以刷新交互式网格。
6psbrbz9

6psbrbz92#

虽然这个解决方案不适用于我的应用程序,但我将保留代码,这些代码完全按照我的要求执行,以防将来对某人有用。我将使用Koen解决方案并创建一个模态对话框。
这将在顶部创建一个新行,选择它并将其作为单行视图打开。然后,保存顶部的保存按钮将返回到正常的报告视图。如果我们已经在报表视图中,则返回到报表视图的代码不会执行任何操作。

function(config) { 
config.initActions = function( actions ) {
  actions.remove('selection-add-row');
  actions.add({
    name: "selection-add-row",
    label: "Add row",
    iconBeforeLabel: "true",
    action: function(event, focusElement) {
     
    // get the model of the interactive grid  
    let model = $(actions.context).interactiveGrid('getCurrentView').model;
    // we insert a blank row.
    model.insertNewRecord();
    // get the grid
    let gridView = ig$.interactiveGrid("getViews").grid
    // find the record by id, in this case the new record has id t1000.
    let record = model.getRecord( "t1000" ); 
    // select and focus record
    gridView.view$.grid("setSelectedRecords", [record], true); 
    // open the single row view now that the new record is selected
    $(actions.context).interactiveGrid('getActions').invoke("single-row-view"); 
        
    }
  });
  actions.remove('save');
  actions.add({
    name: "save",
    label: "Save",
    iconBeforeLabel: "true",
    action: function(event, focusElement) {
    
    // get the model of the interactive grid  
    let model = $(actions.context).interactiveGrid('getCurrentView').model;
    // we save the data
    model.save();
    // Up to this point this is the same as the normal save button.
    // But if we are in the single row view saving get us out from there and back into the report.
    $(actions.context).interactiveGrid('getActions').invoke("close-single-row-view");
        
    }
  });
}
return config;}

相关问题