【问题标题】:How can I make a specific row unselectable in a Vaadin Grid with a mult-selection model?如何在具有多选模型的 Vaadin 网格中使特定行无法选择?
【发布时间】:2023-03-16 07:28:01
【问题描述】:

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

【问题讨论】:

    标签: vaadin vaadin7 vaadin-grid


    【解决方案1】:

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

    【讨论】:

    • 感谢@jqrsd,这正是我所需要的!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果您使用 twitter bootstrap 作为响应式框架,您应该能够找到该行并将其指定为“.inactive”类,如果这不起作用,您可以随时安装它,但放置和绝对定位该行内高度和宽度为 100% 的框,并将其 z-index 设置为至少 250。这应该使该行中的所有内容都不可点击!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-24
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-09
        • 1970-01-01
        相关资源
        最近更新 更多