Ошибка в индексе строки сетки vaadin 8

Я переношу свой проект с vaadin 7 на vaadin 8. Поскольку таблица удалена. поэтому я заменяю его сеткой. Раньше я получал идентификаторы строк для множественного выбора следующим образом:

  Set<Object> itemIds = table.getValue();
  for(Object lItem : itemIds){
      Integer lId = Integer.parseInt(lItem.toString());
  }

Но в сетке vaadin 8 есть прослушиватель itemclick, который предоставляет rowindex только в том случае, если мы нажимаем на любой элемент и при щелчке любого флажка для выбора он ничего не возвращает, поскольку флажки работают только с прослушивателем выбора. см. код ниже:

  lGrd.addItemClickListener(new ItemClickListener<Employee>() {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        @Override
        public void itemClick(ItemClick<Employee> event) {

            if(lGrd.getSelectionModel().isSelected(event.getItem())){
                if(!lSelection.contains(event.getRowIndex())){
                    lSelection.add(event.getRowIndex());
                }
            }else if(lSelection.contains(event.getRowIndex())){
                lSelection.remove(event.getRowIndex());
            }

            Notification.show(lSelection.toString() + " Selected Employees Row Id");
        }
    });

Также, используя прослушиватель выбора, он не возвращает индекс строки, как в itemclicklistener

  lGrd.addSelectionListener(new SelectionListener<Employee>() {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        @Override
        public void selectionChange(SelectionEvent<Employee> event) {
            Set<Employee> lSet = event.getAllSelectedItems();
            for(Employee emp : lSet){
                //how to fetch row id here
            }
        });

Он предоставляет выбранные элементы, но без индекса строки. Как получить индекс строки сотрудников здесь. Также, если мне нужны какие-либо данные столбца. Как его получить?


person tushar sharma    schedule 11.05.2018    source источник


Ответы (1)


Начиная с версии Framework 8.4.0 (примечания к выпуску) событие Grid.ItemClick (Grid.ItemClick doc) также содержит информацию индекса строки выбранного элемента.

до этого у нас был уродливый обходной путь :(

мы шляпу

частные элементы списка; частная сетка Grid; как поля класса.

в методе инициализации мы заполнили Список элементами и получили

grid.setITems (элементы);

onclick у нас всегда был элемент из Click Event раньше что-то уродливое вроде (Item) event.getSource (). getValue (), я думаю, с современным Vaadin событие параметризуется, поэтому мы просто получаем event.getValue ()

затем мы использовали items.indexOF (event .. get Value ..);

так что я ОЧЕНЬ благодарен, что, начиная с Vaadin 8.4, мы можем провести рефакторинг :)! ! !

person Vilius Kukanauskas    schedule 11.05.2018
comment
привет, спасибо за ваше время, на самом деле мне нужен индекс строки при выборе строки. Как я могу это сделать? - person tushar sharma; 12.05.2018
comment
Клиентская сторона Grid знает индексы строк, которые она показывает в данный момент. Таким образом, реализовать это в ItemClickEvent было несложно. Выбор - это совершенно другой случай, поскольку он также может быть программным, и тогда у вас есть случай, когда вы выбираете строку, которая не отображается. Тогда мы не знаем индекса. Реализация, охватывающая все варианты использования, потребовала бы, чтобы Grid извлекал все данные и вычислял индекс. Вот почему мы оставляем это разработчику, чтобы он хорошо понимал разницу между операциями O (1) и O (N). - person Tatu Lund; 12.05.2018
comment
@Vilius Kukanauskas Спасибо за ваш отзыв. - person Tatu Lund; 12.05.2018