Таблица Scout Eclipse Данные формы Количество строк

Я сталкиваюсь с очень странным поведением, и я не знаю, сделано ли это намеренно или это ошибка внутри разведчика. (Я мог бы понять, почему это может быть функцией, но тогда мне нужно что-то обойти...)

У меня есть таблица внутри формы. Предположим, что у меня есть два столбца 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 возвращать правильный номер?


person Marko Zadravec    schedule 22.10.2015    source источник


Ответы (1)


Если я правильно понимаю ваш вопрос, вы хотите знать, почему удаленные строки остаются в таблице и как это влияет на количество строк.

Во-первых: у Eclipse Scout есть два способа обработки удаленных строк:

  1. «Режим корзины», в котором удаленные строки просто меняют свое состояние строки (ITableRow.getRowState()) на ITableRow.STATUS_DELETED. Вы можете использовать это, чтобы отправить эти все строки таблицы в службу и легко увидеть, какие строки были удалены, и сохранить эти изменения. (Так же, как вы можете видеть, какие строки были вставлены/изменены). Этот режим обычно используется, если ваш пользователь добавляет/изменяет/удаляет несколько строк, и изменения сохраняются только при «действии сохранения» (кнопка «ОК» или аналогичная).
  2. «Режим немедленного удаления», при котором строки отбрасываются сразу после их удаления. Вы не сможете снова извлечь эти отброшенные строки из модели скаута позднее. Обычно используется, когда вы работаете на странице таблицы, когда любые изменения пользователя должны быть применены немедленно.

Вы можете переключаться между этими двумя режимами, переопределяя AbstractTable.getConfiguredAutoDiscardOnDelete(). Возвращаемое значение по умолчанию — false, что соответствует «режиму 1», true переведет вас в «режим 2» и даст указание разведчику немедленно отбросить любую удаляемую строку.

Чтобы решить часть вашего вопроса, связанную с количеством строк/индексом:

Если вы удаляете строки и не отбрасываете их (режим 1), вам нужно будет учитывать эти строки, которые не видны пользователю. Количество строк будет включать те удаленные невидимые строки!

Источник: Вики-концепция Eclipse Scout: Таблица — Удалить строку из таблицы

person Patrick    schedule 27.10.2015