如何无需选中网格行即可为其添加样式名称
实现方案
你可以通过自定义变量存储当前高亮的行条目,配合行刷新逻辑实现不触发行选中的高亮效果,完全不需要调用Grid的选中相关API:
- 首先在当前类中定义一个成员变量,用于存储当前需要高亮的行对应的数据条目:
// T替换为你的Grid绑定的数据实体类型 private T currentHighlightedItem; - 修改行点击监听器逻辑,仅更新自定义的高亮变量,同时刷新受影响的行触发样式重计算:
grid.addItemClickListener(e -> { T clickedItem = e.getItem(); // 刷新之前高亮的行,清除旧样式 if (currentHighlightedItem != null) { grid.refreshItem(currentHighlightedItem); } // 若需要支持二次点击取消高亮,保留下行逻辑,不需要则直接赋值为clickedItem即可 currentHighlightedItem = currentHighlightedItem == clickedItem ? null : clickedItem; // 刷新当前点击的行,应用新样式 if (currentHighlightedItem != null) { grid.refreshItem(currentHighlightedItem); } }); - 修改样式生成器,判断当前行是否匹配自定义的高亮条目即可:
注意需提前导入grid.setStyleGenerator(row -> Objects.equals(currentHighlightedItem, row) ? getRowSelectedStyle(row) : null );java.util.Objects工具类,避免currentHighlightedItem为空时出现空指针异常
该方案完全不涉及Grid内置的选中状态管理,不会触发行选中事件、也不会修改getSelectedItems()的返回结果,完全符合你的业务需求。
内容的提问来源于stack exchange,提问作者Michael Kročka
相关产品推荐
相关产品推荐

