protected void onSelectionChange(com.vaadin.event.selection.SelectionEvent<E> e) { DataGridItems<E> dataGridItems = getItems(); if (dataGridItems == null || dataGridItems.getState() == BindingState.INACTIVE) { return; } Set<E> selected = getSelected(); if (selected.isEmpty()) { dataGridItems.setSelectedItem(null); } else { // reset selection and select new item if (isMultiSelect()) { dataGridItems.setSelectedItem(null); } E newItem = selected.iterator().next(); E dsItem = dataGridItems.getSelectedItem(); dataGridItems.setSelectedItem(newItem); if (Objects.equals(dsItem, newItem)) { // in this case item change event will not be generated refreshActionsState(); } } fireSelectionEvent(e); LookupSelectionChangeEvent<E> selectionChangeEvent = new LookupSelectionChangeEvent<>(this); publish(LookupSelectionChangeEvent.class, selectionChangeEvent); }