如何使用多选模型使 Vaadin Grid 中的特定行无法选择?

Ada*_*amD 0 vaadin vaadin7 vaadin-grid

我试图根据它的 Bean 的某些属性禁用特定行上的复选框(或者只是使整行通常无法选择),但我真的看不到任何可以用来获取句柄的方法或属性使用多选模型或禁用整行等广泛的内容时,会添加左侧的复选框。关于如何实现这一目标或我应该在哪里寻找的任何想法?

小智 5

您可以使用 CSS 隐藏不可检查的行。首先使用setRowStyleGenerator以下方法设置它们的样式:

grid.setRowStyleGenerator(row -> {
    boolean uncheckable = (Boolean) 
        row.getItem().getItemProperty("uncheckable").getValue();
    return uncheckable ? "uncheckable-row" : "";
});
Run Code Online (Sandbox Code Playgroud)

然后更改 .scss 中的样式,它们应该如下所示:

.v-grid-row.uncheckable-row td {
    background: #b1b9d6 none repeat scroll 0 0;
}

.v-grid-row.uncheckable-row td:first-child {
    visibility: hidden;
}

.v-grid-row.uncheckable-row.v-grid-row-selected > .v-grid-cell {
    background-image: none;
    border-color: #d4d4d4;
    color: inherit;
    text-shadow: inherit;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我用复选框隐藏整个单元格(如果隐藏td自身的内容,用户仍然可以选择行),为这些行使用不同的颜色并防止它们在“全选”复选框处于活动状态时突出显示。当然,进一步的样式是可用的。由于我们只对用户隐藏它们,它们仍然可以被选择grid.select()并位于grid.getSelectedRows()集合中,您应该手动过滤它们(通过使用一些“uncheckable”属性,如上所示)。