2016-07-10 1 views
0

Vaadin: Мне нужно установить выбранную строку после обновления содержимого таблицы. У меня есть Comboboxbutton, содержащий разных клиентов. Кроме того, у меня есть две таблицы, первая показывает основные категории, а рубрики - подкатегории. Изначально клиент не выбран, показаны основные категории, не показана подкатегория.Vaadin set selected row of table

Когда я нажимаю на категорию (скажем, продукт, например!), Пользователи таблицы подкатегорий и показывают подкатегории. Когда я меняю клиента сейчас с пустого на конкретного клиента, обе таблицы фильтруются, НО: выбор продукта утерян. Мне нужно установить выделение на тот, который был выбран ранее.

Я получаю содержимое таблицы как объект sql-container из класса antoher.

mainCatTable = new Table(); 
... 
mainCatTable.setContainerDataSource(source.getMainCats()); 

//My Checkboxbutton 
Combobox custBox = new ComboBox(); 

//Get the customers from the Database 
custBox.setContainerDataSource(source.getCustomers()); 

custBox.setItemCaptionPropertyId("Customers"); 
custBox.addValueChangeListener(new ValueChangeListener() { 
    public void valueChange(ValueChangeEvent valueEvent) { 

//Here I need to store the old selection, before i update the mainCat table to a specific customer 
      mainCatTable.setContainerDataSource(source.getMainCats(currentCustomer)); 

//Here I need something to set the selected row to the previous value 
      subCatTable.setContainerDataSource(source.getSubCats()); 
      } 
}); 

СКП-контейнер, который возвращает метод getMainCats, создается следующим образом:

FreeformQuery subcatExtractionQuery = new FreeformQuery("select customerName from customers", connectionPool); 
return new SQLContainer(subcatExtractionQuery); 

Проблема заключается в том, т пробовал разные способы, но это не сработало. Это была моя попытка: https://vaadin.com/forum/#!/thread/1819417/1819416 Но они используют контейнер-указатель, но я этого не делаю.

Может кто-нибудь объяснить, как это сделать БЕЗ контейнера с индексом?

+0

Какой контроллер это «не проиндексированный контейнер»? Не могли бы вы быть более конкретными в этом отношении? – mico

+0

извините, теперь я добавил информацию. Это то, что вы имели в виду? – Tobi123

ответ

2

Как использовать значение таблицы для получения/установки «выбранной» строки?

Object value = mainCatTable.getValue();  
mainCatTable.setContainerDataSource(source.getMainCats(currentCustomer)); 
mainCatTable.setValue(value); 
+0

Я пробовал что-то подобное, но не удалось. ЭТО работает - спасибо! – Tobi123

+0

UPDATE: К сожалению, это не приводит к выбору буровой установки. Потому что он принимает только идентификатор. Если перед обновлением выбрана третья строка, после обновления выбирается строка thrid. BUT: Возможно изменение содержимого (например: новый Maincat в первой строке => Старый, который был выбран, теперь находится в 4-м месте и находился на третьем месте перед обновлением), поэтому после таблицы выбирается другой mainCat Обновить. Поэтому мне нужно что-то, что может прочитать выбранный wird/String (для меня это не проблема) и SETVALUE, который не устанавливает строку через id, а устанавливает ее в определенную строку. – Tobi123

 Смежные вопросы

  • Нет связанных вопросов^_^