有没有办法使用 Vaadin 8 网格在编辑模式下设置网格中的单元格
Is there a way to set a cell in grid in edit mode with Vaadin 8 grid
我使用 Vaadin 8 定义了这样的网格:
ListDataProvider<Value> gridDataProvider =
new ListDataProvider<>(new ArrayList<>());
GridSelectionModel<Value> selectionModel;
Grid<Value> grid = new Grid<>(Value.class);
TextField editorField = new TextField();
editorField.setSizeFull();
Binder<Value> binder = new Binder<>();
binder.bind(editorField, Value::getValue, Value::setValue);
Editor<Value> gridEditor = grid.getEditor();
gridEditor.setBinder(binder);
gridEditor.addSaveListener((EditorSaveListener<Value>) event -> {
gridDataProvider.refreshAll();
});
gridEditor.setEnabled(true);
grid.addColumn(Value::getValue).setEditorComponent(editorField, Value::setValue);
grid.removeHeaderRow(0);
selectionModel = grid.setSelectionMode(Grid.SelectionMode.MULTI);
grid.setDataProvider(gridDataProvider);
grid.setSizeFull();
Value bean 只是一个普通的 bean
private class Value {
private String value;
Value(String value) {
this.value = value;
}
String getValue() {
return value;
}
void setValue(String value) {
this.value = value;
}
@Override public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Value value1 = (Value) o;
return Objects.equals(value, value1.value);
}
我想做的是添加按钮,因此通过单击该按钮,应将新行添加到网格中,新行中的唯一列应设置为编辑模式,以便用户可以直接写入新值.
可以这样做吗?
当前的 Vaadin 8 API 无法以编程方式打开编辑器。目前有 2 个问题要添加此功能:
https://github.com/vaadin/framework/issues/8477
https://github.com/vaadin/framework/issues/8820
最好不要在 equals 方法中使用 Value.value,因为这会导致某些网格功能出现问题,例如 grid.select(T item)。
这段代码将允许用户使用方向键和回车键来编辑最新的项目。
private void onButtonClick(Button.ClickEvent clickEvent) {
Value newValue = new Value("New value");
list.add(newValue);
grid.getDataProvider().refreshAll();
grid.focus();
}
隐藏编辑器后网格将不会自动获得焦点。您需要稍微帮助 Vaadin:
gridEditor.addSaveListener((EditorSaveListener<Value>) event -> {
gridDataProvider.refreshAll();
grid.focus();
});
我使用 Vaadin 8 定义了这样的网格:
ListDataProvider<Value> gridDataProvider =
new ListDataProvider<>(new ArrayList<>());
GridSelectionModel<Value> selectionModel;
Grid<Value> grid = new Grid<>(Value.class);
TextField editorField = new TextField();
editorField.setSizeFull();
Binder<Value> binder = new Binder<>();
binder.bind(editorField, Value::getValue, Value::setValue);
Editor<Value> gridEditor = grid.getEditor();
gridEditor.setBinder(binder);
gridEditor.addSaveListener((EditorSaveListener<Value>) event -> {
gridDataProvider.refreshAll();
});
gridEditor.setEnabled(true);
grid.addColumn(Value::getValue).setEditorComponent(editorField, Value::setValue);
grid.removeHeaderRow(0);
selectionModel = grid.setSelectionMode(Grid.SelectionMode.MULTI);
grid.setDataProvider(gridDataProvider);
grid.setSizeFull();
Value bean 只是一个普通的 bean
private class Value {
private String value;
Value(String value) {
this.value = value;
}
String getValue() {
return value;
}
void setValue(String value) {
this.value = value;
}
@Override public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Value value1 = (Value) o;
return Objects.equals(value, value1.value);
}
我想做的是添加按钮,因此通过单击该按钮,应将新行添加到网格中,新行中的唯一列应设置为编辑模式,以便用户可以直接写入新值. 可以这样做吗?
当前的 Vaadin 8 API 无法以编程方式打开编辑器。目前有 2 个问题要添加此功能:
https://github.com/vaadin/framework/issues/8477
https://github.com/vaadin/framework/issues/8820
最好不要在 equals 方法中使用 Value.value,因为这会导致某些网格功能出现问题,例如 grid.select(T item)。
这段代码将允许用户使用方向键和回车键来编辑最新的项目。
private void onButtonClick(Button.ClickEvent clickEvent) {
Value newValue = new Value("New value");
list.add(newValue);
grid.getDataProvider().refreshAll();
grid.focus();
}
隐藏编辑器后网格将不会自动获得焦点。您需要稍微帮助 Vaadin:
gridEditor.addSaveListener((EditorSaveListener<Value>) event -> {
gridDataProvider.refreshAll();
grid.focus();
});