Vaadin 14-使用渲染删除按钮删除一行网格



我的网格指的是MySQL数据库表。

this.grid   = new Grid<>(Person.class, false);

然后,我为我的属性添加了列,还为一个渲染组件添加了一列,该组件链接到包含我的删除按钮的ui。

this.grid.addColumn(RenderedComponent.Renderer(DeleteButton::new))

因此,在网格的每一行中都有一个要删除的按钮。

我的问题是,我不知道如何获得引用按钮所在行的bean。因为当我有了它,我希望可以在点击按钮时做到这一点:

new PersonDAO().remove(bean);

然后刷新网格。

在列渲染器中,您可以访问该项。您只是还没有将其用于按钮创建。代替

this.grid.addColumn(RenderedComponent.Renderer(DeleteButton::new))

你可以做这个

this.grid.addComponentColumn(item -> new DeleteButton(item));

并将DeleteButton类更改为在构造函数中期望该项。现在,您可以使用该项将其从点击侦听器内的数据库中删除

如果您还想刷新网格,您还必须了解clicklistener内部的网格。将网格也传递到DeleteButton中,或者可以在DeleteButton类之外定义clicklistener。这可能会使DeleteButton类过时,除非它有一些自定义样式或其他增强功能。

// using Button instead of DeleteButton for clarity
this.grid.addComponentColumn(item -> new Button("Delete", click -> {
this.personDao.remove(item); // NEVER instantiate your service or dao yourself, instead inject it into the view
this.grid.getDataProvider().refresh();
}));

最新更新