0

I need to add/remove/customize columns from a Vaadin Grid which contains auto generated jooq records.

BeanItemContainer<MyJooqRecord> beanItemContainer;
beanItemContainer = DBUtil.getAll();
Grid grid = new Grid();
grid.setContainerDataSource(beanItemContainer);

now I like to (for example) add a Button.

grid.addColumn("Action", Button.class).setRenderer(
            new ButtonRenderer(new RendererClickListener() {
                @Override
                public void click(RendererClickEvent event) {
                   //code ...
                }
            }
    ));

result:

2016-11-30 10:39:17,950 [http-nio-8080-exec-2] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] [DirectJDKLog.java:181] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [com.vaadin.server.ServiceException: java.lang.IllegalStateException: Container for this Grid is not a default container from Grid() constructor] with root cause 

java.lang.IllegalStateException: Container for this Grid is not a default container from Grid() constructor

with Vaadin Tables it just works fine. But after reading this I like to use Grids

The reason why this happens I found here

How to write a Container with simple Beans I found here

How can I achieve that with jooq records?

any advice please


Java 1.7 - Vaadin 7.7.3

Community
  • 1
  • 1
tahopu
  • 11
  • 1
  • 3

1 Answers1

0

change

grid.setContainerDataSource(beanItemContainer);

to

//grid.setContainerDataSource(beanItemContainer);
GeneratedPropertyContainer wrapperContainer = new GeneratedPropertyContainer(beanItemContainer);
grid.setContainerDataSource(wrapperContainer);

to REMOVE a column

wrapperContainer.removeContainerProperty("createdDate");

to ADD a column

wrapperContainer.addGeneratedProperty("Col. Name", new PropertyValueGenerator<String>() {

        @Override
        public String getValue(Item item, Object itemId, Object propertyId) {

            return "Button Caption";

        }

        @Override
        public Class<String> getType() {

            return String.class;

        }
});

to CUSTOMIZE a column (add a renderer) like this

grid.getColumn("Col. Name").setRenderer(new ButtonRenderer(new RendererClickListener() {
        @Override
        public void click(RendererClickEvent event) {

            MyJooqRecord record = (MyJooqRecord) event.getItemId();
            //code ...
        }
}));
tahopu
  • 11
  • 1
  • 3
  • found [another source](http://demo.vaadin.com/book-examples-vaadin7/book/#component.grid.renderer.button) with Java 8 examples – tahopu Nov 30 '16 at 14:52