I encounter very strange behavior and I don't know if this is intentionally or it is a bug inside scout. (I could understand why this could be a feature, but then I need some work around...)
I have some table inside form. Let suppose that I have two columns Column A
and Column B
and I have two rows.
------------------------
| Column A | Column B |
------------------------
| 10 | 20 |
------------------------
| 30 | 40 |
------------------------
if I check on client last row like this :
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
and this is ok. Now I update last row and delete first one so now it looks like this :
------------------------
| Column A | Column B |
------------------------
| 60 | 40 |
------------------------
now If I try same as before :
// 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
like previous (deleted) row stays inside form data.
I understand that just update already created rows to current value is quicker then replace all rows but shouldn't getRowCount
return right number ?
If I understand your question correctly, you want to know why deleted rows stay in the table and how this affects the row count.
First: Eclipse Scout has two ways that it can handle deleted rows:
ITableRow.getRowState()
) to ITableRow.STATUS_DELETED
. You can use this to send these all rows of the table to a service and easily see which rows were deleted and persist these changes. (The same way as you can see which rows were inserted/changed). This mode is typically used if your user adds/modifies/deletes multiple rows and the changes are persisted only on a 'save action' (OK button or similar).You can switch between those two modes by overriding AbstractTable.getConfiguredAutoDiscardOnDelete()
. The default return value is false
which is "mode 1", true
would put you in "mode 2" and instruct scout to immediately discard any row that is deleted.
To address the row count/index part of your question:
If you delete rows and do not discard them (mode 1), you will need to account for these rows that are not visible to the user. The row count will include those deleted invisible rows!
Source: Eclipse Scout Concept Wiki: Table - Delete a row from the table