Добавить столбец компонента только в дочерние строки - PullRequest
0 голосов
/ 26 апреля 2019

Я занимаюсь разработкой приложения для 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 Ответ

1 голос
/ 26 апреля 2019

Пара мыслей для вас.Сначала я вспоминаю, что существует некоторая проблема, связанная с использованием столбца компонента в качестве кнопки удаления, см.

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

Я думаю, что это также относится и к TreeGrid.

Таким образом, один из вариантов - использовать ButtonRenderer или упомянутое дополнение.

Теперь, что за хитрость скрывает кнопку от родительских строк?Для этого, я думаю, вам нужны достаточные данные в EmployeeDto, чтобы можно было определить, является ли это родительской строкой или нет.

Если да, вы можете использовать setStyleGenerator в столбце, где у вас есть кнопка, и установить в них «display: none» с этим стилем.

...