如何使用多选择模型在Vaadin网格中使特定行不可选择?

如何使用多选择模型在Vaadin网格中使特定行不可选择?,vaadin,vaadin7,vaadin-grid,Vaadin,Vaadin7,Vaadin Grid,我正试图基于某个特定行的Bean属性禁用该复选框(或者只是使整行通常不可选择),但我真的看不到任何方法或属性,当使用多重选择模型或像禁用整行这样广泛的东西时,我可以使用它们来获得左侧复选框的句柄。关于如何实现这一点,或者我应该在哪里寻找,有什么想法吗?不可能禁用特定行上的复选框 一种解决方案是使用生成的列和/或自定义呈现程序。无法禁用特定行上的复选框 一种解决方案是使用生成的列和/或自定义渲染器。您可以使用CSS隐藏不可选中的行。首先使用setRowStyleGenerator设置其样式: gr

我正试图基于某个特定行的Bean属性禁用该复选框(或者只是使整行通常不可选择),但我真的看不到任何方法或属性,当使用多重选择模型或像禁用整行这样广泛的东西时,我可以使用它们来获得左侧复选框的句柄。关于如何实现这一点,或者我应该在哪里寻找,有什么想法吗?

不可能禁用特定行上的复选框


一种解决方案是使用生成的列和/或自定义呈现程序。

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


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

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

grid.setRowStyleGenerator(row -> {
    boolean uncheckable = (Boolean) 
        row.getItem().getItemProperty("uncheckable").getValue();
    return uncheckable ? "uncheckable-row" : "";
});
然后更改.scs中的样式,它们应该类似于:

.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”属性,如上所示)。

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

grid.setRowStyleGenerator(row -> {
    boolean uncheckable = (Boolean) 
        row.getItem().getItemProperty("uncheckable").getValue();
    return uncheckable ? "uncheckable-row" : "";
});
然后更改.scs中的样式,它们应该类似于:

.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()
集合中,您应该手动筛选它们(通过使用一些“不可选中”的属性,如上所示)。

如果您使用twitter引导作为响应框架,你应该能够找到那一行,并给它一个“.inactive”的类,如果这不起作用,你可以总是装配它,但放置和绝对定位框,高度和宽度为100%在那一行内,并将其z索引到至少250。这将使该行中的所有内容都不可单击

如果你使用twitter引导作为你的响应框架,你应该能够找到那一行,并给它一个“.inactive”类,如果这不起作用,你可以随时装配它,但将高度和宽度为100%的框放置在该行内,并将其z索引到至少250。这将使该行中的所有内容都不可单击

谢谢@jqrsd,这看起来正是我需要的!谢谢@jqrsd,这看起来正是我需要的!