Vaadin流:网格条件背景色

时间:2019-04-09 04:15:55

标签: vaadin-grid vaadin-flow vaadin10

我想根据条件为网格线着色。 我试试这个:

Java:

gridEtudiant.setClassNameGenerator(t -> {
    if (t.getEtud_numero().startsWith("2")) {
        return "error_row";
    }
    return "";
});

Css:

td.error_row {
  background-color: red;
}

HTML

<td id="vaadin-grid-cell-1" tabindex="0" role="gridcell" part="cell body-cell" first-column="" reorder-status="undefined" aria-selected="false" class="error_row" style="width: 100px; flex-grow: 1; order: 10000000;"><slot name="vaadin-grid-cell-content-1"></slot></td>

我们可以看到'class =“ error_row”',但它不是红色。

Vaadin版本为13.0.1

2 个答案:

答案 0 :(得分:3)

您的Java代码看起来不错。

请确保您有一个类似webapp/frontend/styles/shared-styles.html的html文件,其中包含以下内容:

<dom-module id="my-grid-theme" theme-for="vaadin-grid">
    <template>
        <style>
            [part~="cell"].error_row {
                background: red;
            }
        </style>
    </template>
</dom-module>

如果随后您的布局中包含用@HtmlImport("frontend://styles/shared-styles.html")注释的网格(由于已经应用了自定义css类,您似乎已经拥有了),它应该可以工作。

示例:

grid.addColumn(Customer::getFirstname).setHeader("Firstname");
grid.addColumn(Customer::getLastname).setHeader("Lastname");
grid.addColumn(Customer::getEmail).setHeader("Email");
grid.setClassNameGenerator(customer -> {
    if (customer.getFirstname().equals("Marco")) {
       return "error_row";
    } else {
       return "";
    }
});

成为:

enter image description here

答案 1 :(得分:0)

要为网格本身(在您的情况下的单元格中)设置样式,您需要使用dom-module。如果要为单元格的内容设置样式,则可以使用css规则。 Styling By Overriding Component Styles

下有一个示例

我在官方文档中没有找到使用setClassNameGenerator的任何示例,但是从此PR Add setClassNameGenerator API to Grid and Column,您可以找到如何使用它。还有一个在grid-demo-styles.html处设置了类名subscriberminor的示例。