仅在子行上添加组件列

时间:2019-04-26 12:20:02

标签: spring-boot vaadin8 treegrid

我正在Spring Boot和Vaadin 8上开发应用程序,我的问题是如何仅在树状网格的子行上生成按钮。我已经尝试过这种方式,但是在每一行中,父级和子级都会生成按钮。

private void setUpTreeGrid() {
    treeGrid = new TreeGrid<>();
    treeGrid.setSizeFull();

    treeGrid.addColumn(EmployeeDto::getEmployee).setCaption("Employee").setId("employee-column");
    treeGrid.addColumn(EmployeeDto::getComputer).setCaption("Computers").setId("computer-column");
    treeGrid.addComponentColumn(this::deleteButton).setCaption("Delete"); // Generates a button on parent and child row

    data = new TreeData<>();
    data.addItems(generateEmployee(), EmployeeDto::getSubEmployee);
    dataProvider = new TreeDataProvider<>(data);
    treeGrid.setDataProvider(dataProvider);


    addComponent(treeGrid);
}

private Button deleteButton(EmployeeDto employeeDto) {

    Button button = new Button(VaadinIcons.CLOSE);
    button.addStyleName(ValoTheme.BUTTON_SMALL);
    button.addClickListener(e -> {
     //   Delete function
        onChange();
    });
    return button;
}

这就是我在树状网格中设置数据的方式

private List<EmployeeDto> generateEmployee() {
    List<Employee> employees = employeeService.findAllEmployee();

    List<EmployeeDto> employeeList = new ArrayList<>();
    for (Employee employee : employees) {
        EmployeeDto employeeDto;
        employeeDto = new EmployeeDto(employee.getUserName() + " " + employee.getFirstName() + " " + employee.getLastName(), String.valueOf(employee.getComputers().size()));
        if (!(employee.getComputers().isEmpty())) {
            employeeList.add(employeeDto);
        }
        for (int i = 0; i < employee.getComputers().size(); i++) {
            EmployeeDto subEmployee = new EmployeeDto();
            subEmployee.setComputer(employee.getComputers().get(i).getInventoryId());
            employeeDto.addSubEmployee(subEmployee);

        }
    }
    return employeeList;
}

1 个答案:

答案 0 :(得分:1)

对您的想法。首先,我记得使用组件列作为删除按钮存在一些特殊情况,请参见:

https://github.com/vaadin/framework/issues/10995

我认为这也适用于TreeGrid。

所以一种选择是使用ButtonRenderer或提到的插件。

现在,从父行隐藏按钮的窍门是什么?为此,我认为您需要EmployeeDto中足够的数据,以便可以确定它是否是父行。

如果是,则可以在具有按钮的列中使用setStyleGenerator,并在其中使用该样式设置“显示:无”。