Eclipse Scout Neon Focus导入数据后的行内

时间:2016-06-08 10:37:15

标签: import cell eclipse-scout lost-focus

我的表单上有一些依赖层次结构,所以我在侦察器的服务器端实现了层次结构检查。如果更改了一个字段,则会触发检查是否还需要更改其他字段。这是通过导出/导入表单数据完成的。

MyFormData input = new MyFormData();
FormDataUtility.exportFormData(this, input);
input = BEANS.get(IMYService.class).validate(input, field);
FormDataUtility.importFormFieldData(this, input, false, null, null);

验证功能更改需要更改的所有其他字段。

我的问题是编辑可编辑表格中的单元格。

如果我更改单元格中的值,并且触发了此链验证,则在导入表单数据后,我会失去焦点在单元格中。相反,tab会将我移动到另一个单元格,tab触发器导入并且单元格中的焦点丢失。这是一个非常糟糕的用户体验。

如何解决这个问题? 如何在调用导入后保持焦点(下一个单元格)?

马尔科

1 个答案:

答案 0 :(得分:0)

我不确定,如果这适用于您,但您可以尝试以下方法:
我假设您在列类的execCompleteEdit(ITableRow row, IFormField editingField)中执行导出/验证/导入逻辑。我建议您自己计算下一个可聚焦单元格,并在导入表单数据后请求其焦点。
举个例子,你可以这样做:

    @Override
    protected void execCompleteEdit(ITableRow row, IFormField editingField) {
       super.execCompleteEdit(row, editingField);
       // create form data object
       // export form data
       // call service and validate
       // import form data
       // request focus for next cell
       focusNextAvailableCell(this, row);
    }


focusNextAvailableCell(this, row)如下:

private void focusNextAvailableCell(IColumn<?> col, ITableRow row) {
    if (col == null || row == null) {
        return;
    }
    IColumn<?> nextColumn = getColumnSet().getColumn(col.getColumnIndex()+1);
    ITableRow nextRow = getTable().getRow(row.getRowIndex());
    if (nextColumn == null) {
        // no next column (last column lost focus)
        // check if next row is available
        nextRow = getTable().getRow(row.getRowIndex()+1);
        // maybe select first cell again?
        if (nextRow == null) {
            nextColumn = getColumnSet().getColumn(0);
            nextRow = getTable().getRow(0);
        }
    }

    if (nextColumn != null && nextRow != null) {
        getTable().requestFocusInCell(nextColumn, nextRow);
    }
}

您应该知道,您必须在列的execCompleteEdit方法中导入每个表单数据后调用此方法。此外,这不仅在通过按Tab键切换单元格时触发,而且在使用鼠标按钮单击时也会触发。

最好的问候!