I create simple grid with data from database:
BeanItemContainer<Customer> container = new BeanItemContainer<>(Customer.class, customerRepository.findAll());
Grid grid = new Grid(container);
To edit each row the button was created:
Button edit = new Button("Edit", clickEvent -> openWindow((Customer) grid.getSelectedRows().iterator().next()));
This open new window with edit form. After all changes accepted, I must manually refresh whole page to see modification on Grid. My question is:
How refresh only Grid after modification of any row entry? And how save those modifications to database (maybe beanItemContainer could do it)?
If you add items to grid, you should use DataProvider. refreshAll().
Update the Row Data inside the grid by updating the rowData grid property or by calling the grid API setRowData() .
It's a bug. Grid doesn't update itself after changes were done in underlying container nor has any reasonable method to refresh. There are several hacks around this issue i.e.
grid.clearSortOrder();
or
grid.setEditorEnabled(true);
grid.setEditorEnabled(false);
SSCCE:
TextField text = new TextField("Edit");
Grid grid;
BeanItemContainer<Customer> container;
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
container = new BeanItemContainer<>(Customer.class, Arrays.asList(new Customer("1"), new Customer("2")));
grid = new Grid(container);
Button open = new Button("open");
open.addClickListener(this :: openListener);
Button save = new Button("save");
save.addClickListener(this :: saveListener);
layout.addComponents(grid, open, save, text);
setContent(layout);
}
private void openListener(Button.ClickEvent clickEvent){
text.setValue(((Customer) (grid.getSelectedRow())).getName());
}
private void saveListener(Button.ClickEvent clickEvent){
Customer c = (Customer) grid.getSelectedRow();
c.setName(text.getValue());
grid.clearSortOrder();
}
Possible duplicate Update Grid with a fresh set of data, in Vaadin 7.4 app
With Vaadin 8, the following works to refresh the grid after rows have been added or removed or the underlying data has been changed:
grid.getDataProvider().refreshAll();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With