Scout Eclipse table 表单数据行数
Scout Eclipse table Form data number of rows
我遇到了非常奇怪的行为,我不知道这是故意的还是 scout 内部的错误。 (我能理解为什么这可能是一个功能,但我需要一些解决方法...)
我有一些 table 内部表格。假设我有两列 Column A
和 Column 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 有两种处理删除行的方法:
- "recycling bin mode",其中删除的行只是将它们的行状态 (
ITableRow.getRowState()
) 更改为 ITableRow.STATUS_DELETED
。您可以使用它将 table 的这些所有行发送到服务,并轻松查看删除了哪些行并保留这些更改。 (与查看哪些行是 inserted/changed 的方式相同)。如果您的用户 adds/modifies/deletes 多行并且更改仅保留在 'save action'(确定按钮或类似按钮)上,则通常使用此模式。
- "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
我遇到了非常奇怪的行为,我不知道这是故意的还是 scout 内部的错误。 (我能理解为什么这可能是一个功能,但我需要一些解决方法...)
我有一些 table 内部表格。假设我有两列 Column A
和 Column 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 有两种处理删除行的方法:
- "recycling bin mode",其中删除的行只是将它们的行状态 (
ITableRow.getRowState()
) 更改为ITableRow.STATUS_DELETED
。您可以使用它将 table 的这些所有行发送到服务,并轻松查看删除了哪些行并保留这些更改。 (与查看哪些行是 inserted/changed 的方式相同)。如果您的用户 adds/modifies/deletes 多行并且更改仅保留在 'save action'(确定按钮或类似按钮)上,则通常使用此模式。 - "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