在 vaadin 网格中单击鼠标标记选定的行(SelectionMode.MULTI)

Wel*_*les 3 java vaadin

我有一个带有多选选项的网格。\n通常,当我单击复选框时,会使用默认选定的颜色选择行。\n但是当我单击网格时,我需要具有相同或其他选定的颜色\xc2\xb4s 行。

\n

我创建了一个CSS:

\n
:host(#grdPeriodicos) td.selected{\n    background-color: #BDBDBD;\n    color: #242140;\n    font-weight: bold;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

将其导入到我的类视图中:

\n
@CssImport(value = "./styles/grid-styles.css", themeFor = "vaadin-grid")\npublic class PeriodicoListaView extends VerticalLayout implements Serializable {\n...\n\ngrdPeriodicos.setId("grdPeriodicos");\ngrdPeriodicos.addColumn(periodico -> periodico.getId_Nota()).setHeader("Nota");\ngrdPeriodicos.addColumn(periodico -> periodico.getId_NotaItem()).setHeader("Nota item"); \ngrdPeriodicos.setSelectionMode(SelectionMode.MULTI);\n\ngrdPeriodicos.setClassNameGenerator( p -> {\n            return ((periodicoDTO != null) && (periodicoDTO.getId_NotaItem().equals(p.getId_NotaItem()))) ? "selected" : null; \n});\n\n\ngrdPeriodicos.addItemClickListener(e -> {\n\n            if(e.getItem() != null) {\n                carregaEPreencheDetalhesPeriodico(e.getItem());             \n            }\n        });\n\n
Run Code Online (Sandbox Code Playgroud)\n

加载网格时上面的代码有效,但是单击该行时没有任何反应。\n我可以在 addItemClickListener 中放入什么来再次触发 setClassNameGenerator?

\n

或者我该怎么做才能在单击该行时选择该行?

\n

Jav*_*ier 5

在多选模式下,单击复选框时会选择该项目,但单击行中的任意位置时不会选择该项目。如果您想选择该项目来响应行单击,您可以执行以下操作:

grdPeriodicos.addItemClickListener(e -> {
  grid.asMultiSelect().select(e.getItem());
});
Run Code Online (Sandbox Code Playgroud)

或者,如果您想更新行样式而不选择该项目,则需要调用refreshItem(这将导致对该行再次评估 ClassNameGenerator)

grdPeriodicos.addItemClickListener(e -> {
  if(e.getItem() != null) {
    carregaEPreencheDetalhesPeriodico(e.getItem());             
    grid.getDataProvider().refreshItem(e.getItem());
  }
});
Run Code Online (Sandbox Code Playgroud)

Vaadin's Cookbook中有一个使用类似方法的现场演示。