如何在具有多选模型的Vaadin网格中使特定行无法选择?

时间:2016-02-04 10:01:06

标签: vaadin vaadin7 vaadin-grid

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

3 个答案:

答案 0 :(得分:4)

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

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

然后更改.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;
}

这里我用复选框隐藏整个单元格(如果隐藏td本身的内容,用户仍然可以选择行),对这些行使用不同的颜色并防止它们在“全选“复选框处于活动状态。当然,还有更多造型可供选择。由于我们只是将其隐藏在用户之外,因此仍然可以使用grid.select()选择它们并位于grid.getSelectedRows()集合中,您应该手动过滤它们(通过使用一些“uncheckable”属性,如上所示)。

答案 1 :(得分:0)

无法禁用特定行上的复选框。

一种解决方案是使用生成的列和/或自定义渲染器。

答案 2 :(得分:0)

如果你使用twitter bootstrap作为你的响应式框架,你应该能够找到那一行并给它一个“.inactive”类,如果这不起作用,你总是可以装备它但放置和绝对定位在该行内部高度和宽度为100%的框,并将其指向至少250.这应该使该行中的所有内容都无法点击!