Scout Eclipse table 表单数据行数

Scout Eclipse table Form data number of rows

我遇到了非常奇怪的行为,我不知道这是故意的还是 scout 内部的错误。 (我能理解为什么这可能是一个功能,但我需要一些解决方法...)

我有一些 table 内部表格。假设我有两列 Column AColumn B 并且我有两行。

------------------------
| Column A  | Column B | 
------------------------
|  10       | 20       |
------------------------
|  30       | 40       |
------------------------

如果我像这样检查客户端最后一行:

getTField().getTable().getAColumn().getValue(getTField().getTable().getRowCount() -1) = 30

final TFormData formData = new TFormData();
this.exportFormData(formData);
formData.getTable().getAColumn(formData.getTable().getRowCount() - 1) = 30

这没关系。现在我更新最后一行并删除第一行,所以现在它看起来像这样:

------------------------
| Column A  | Column B | 
------------------------
|  60       | 40       |
------------------------

现在如果我像以前一样尝试:

// row count = 1
getTField().getTable().getAColumn().getValue(getTField().getTable().getRowCount() -1) = 60 

final TFormData formData = new TFormData();
this.exportFormData(formData);
// row count = 2
formData.getTable().getAColumn(formData.getTable().getRowCount() - 1) = 30
formData.getTable().getAColumn(formData.getTable().getRowCount() - 2) = 60

像上一个(删除的)行一样保留在表单数据中。

我知道将已创建的行更新为当前值比替换所有行更快,但不应该 getRowCount return 正确的数字?

如果我对你的问题的理解正确,你想知道为什么删除的行保留在 table 中以及这如何影响行数。

首先:Eclipse Scout 有两种处理删除行的方法:

  1. "recycling bin mode",其中删除的行只是将它们的行状态 (ITableRow.getRowState()) 更改为 ITableRow.STATUS_DELETED。您可以使用它将 table 的这些所有行发送到服务,并轻松查看删除了哪些行并保留这些更改。 (与查看哪些行是 inserted/changed 的方式相同)。如果您的用户 adds/modifies/deletes 多行并且更改仅保留在 'save action'(确定按钮或类似按钮)上,则通常使用此模式。
  2. "immediate deletion mode"其中的行在删除时立即被丢弃。您以后无法再次从 scout 模型中检索这些丢弃的行。通常在 table 页面中操作时使用,此时用户的任何更改都将立即应用。

您可以通过覆盖 AbstractTable.getConfiguredAutoDiscardOnDelete() 在这两种模式之间切换。默认的 return 值为 false,即 "mode 1",true 会将您置于 "mode 2" 并指示 scout 立即丢弃任何行删除。

要解决您问题的第 count/index 行部分:

如果您删除行而不丢弃它们(模式 1),您将需要考虑这些对用户不可见的行。行数将包括那些已删除的不可见行!

来源: Eclipse Scout Concept Wiki: Table - Delete a row from the table