如何在具有多选模型的 Vaadin 网格中使特定行不可选择?
How can I make a specific row unselectable in a Vaadin Grid with a mult-selection model?
我试图根据 Bean 的某些 属性 禁用特定行上的复选框(或者只是使整行通常无法选择),但我真的看不到任何方法或 属性 在使用多选模型或像禁用整行一样广泛的东西时,我可以用来获取左侧添加的复选框的句柄。关于如何实现这一点,或者我应该去哪里寻找任何想法?
无法禁用特定行上的复选框。
一种解决方案是使用生成的列 and/or 自定义渲染器。
您可以使用 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
本身的内容,用户仍然可以访问 select 该行),为这些行使用不同的颜色并防止当 "select all" 复选框处于活动状态时,它们不会被突出显示。当然,可以使用进一步的样式。由于我们只对用户隐藏它们,它们仍然可以用 grid.select()
编辑并位于 grid.getSelectedRows()
集合中,您应该手动过滤它们(通过使用一些 "uncheckable" 属性,如上图).
如果您使用 Twitter bootstrap 作为您的响应框架,您应该能够找到该行并给它一个 class 的“.inactive”,如果这不起作用你总是可以装配它,但是在该行内放置高度和宽度为 100% 的绝对定位框,并将它的 z-index 至少设置为 250。这应该使该行中的所有内容都不可点击!
我试图根据 Bean 的某些 属性 禁用特定行上的复选框(或者只是使整行通常无法选择),但我真的看不到任何方法或 属性 在使用多选模型或像禁用整行一样广泛的东西时,我可以用来获取左侧添加的复选框的句柄。关于如何实现这一点,或者我应该去哪里寻找任何想法?
无法禁用特定行上的复选框。
一种解决方案是使用生成的列 and/or 自定义渲染器。
您可以使用 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
本身的内容,用户仍然可以访问 select 该行),为这些行使用不同的颜色并防止当 "select all" 复选框处于活动状态时,它们不会被突出显示。当然,可以使用进一步的样式。由于我们只对用户隐藏它们,它们仍然可以用 grid.select()
编辑并位于 grid.getSelectedRows()
集合中,您应该手动过滤它们(通过使用一些 "uncheckable" 属性,如上图).
如果您使用 Twitter bootstrap 作为您的响应框架,您应该能够找到该行并给它一个 class 的“.inactive”,如果这不起作用你总是可以装配它,但是在该行内放置高度和宽度为 100% 的绝对定位框,并将它的 z-index 至少设置为 250。这应该使该行中的所有内容都不可点击!