Nattable — обновление базовых данных

Мы хотим заменить некоторые из наших JFace TableViewer на NatTable. У TableViewer был удобный способ изменить источники данных, а именно:

tableViewer.setInput(source)

Мы использовали этот метод для передачи нового списка при запросе базы данных. Есть ли что-то подобное в NatTable?


person Janos Binder    schedule 01.10.2015    source источник


Ответы (2)


Насколько мне известно, в NatTable вы работаете с реализациями IDataProvider. Для вашего случая List вы можете использовать ListDataProvider.

Учебник по NatTable есть на vogella.com с раздел о предоставлении данных, в котором приводится пример использования List моделей с NatTable. Это хорошая отправная точка. У NatTable довольно сложный API, и я не хочу повторять документацию.

person s.d    schedule 02.10.2015
comment
Спасибо, но это не решает мою проблему. Я не могу заменить базовый список или ссылку ListDataProvider на лету. @dirk-fauth указал в этом вопросе, что лучше всего использовать .clear() и .addAll(List). - person Janos Binder; 03.10.2015

NatTable визуализирует данные, содержащиеся в списке. Для обмена данными, отображаемыми в NatTable, обычно создается ListDataProvider для доступа к данным с экземпляром List, который можно изменять во время выполнения.

Обычно вы обмениваетесь данными через:

  • создать список для NatTable -> natList
  • загрузить данные из базы данных -> dbList
  • natList.clear()
  • natList.addAll (dbList)

В зависимости от того, используете ли вы GlazedLists или нет, вам необходимо обновить NatTable после выполнения действий.

Если вы используете GlazedLists и GlazedListsEventLayer, вам нужно подумать о массовых обновлениях, деактивировав GlazedListsEventLayer перед обновлением содержимого списка данных, чтобы избежать ненужного запуска событий.

person Dirk Fauth    schedule 02.10.2015
comment
Спасибо, это означает, что вместо ссылки на новый объект List, как мы делали это в реализации TableViewer, рекомендуется использовать .clear() и .addAll() в базовом natList. - person Janos Binder; 03.10.2015
comment
Именно так и должно быть с текущей реализацией. В качестве альтернативы вы можете попытаться расширить ListDataProvider и добавить API для замены базового списка во время выполнения. Но если вы используете GlazedLists для переноса исходного списка, ИМХО, лучше использовать механизм очистки и добавления. - person Dirk Fauth; 04.10.2015
comment
Взгляните на API GlazedListsEventLayer#deactivate() и GlazedListsEventLayer#activate(). - person Dirk Fauth; 05.08.2016