Vaadin 24:右键点击Grid时同时选中行并显示上下文菜单
Vaadin 24 Grid右键选中行及获取行索引解决方案
一、GridContextMenu 自动选中右键点击行
你用grid.addContextMenu()时,无需额外找特殊设置,直接在菜单的打开事件或菜单项点击逻辑里获取当前点击的行数据并选中即可:
GridContextMenu<YourItemType> contextMenu = grid.addContextMenu(); // 右键打开菜单时自动选中目标行 contextMenu.addOpenListener(event -> { event.getItem().ifPresent(item -> { // 单选模式下可先取消所有选中再选当前行 // grid.deselectAll(); grid.select(item); }); }); // 菜单操作示例 contextMenu.addItem("编辑", e -> { e.getItem().ifPresent(item -> { // 执行编辑逻辑 }); });
注:列排序、列重排不会影响event.getItem()的正确性,它基于当前Grid展示的实时数据集。
二、ItemClickListener 右键获取行索引并选中
在你现有的右键判断逻辑里,通过event.getItem()拿到行数据,再借助DataProvider获取排序后的行索引:
import com.vaadin.flow.component.MouseButton; grid.addItemClickListener(event -> { if (event.getButton() == MouseButton.SECONDARY) { // 用枚举替代硬编码2,可读性更强 event.getItem().ifPresent(item -> { // 选中当前行 grid.select(item); // 获取当前排序/过滤后的行索引(对应视觉上的行位置) int rowIndex = grid.getDataProvider().indexOf(item); // 处理索引相关业务逻辑 }); } });
内容的提问来源于stack exchange,提问作者MarekChr
相关产品推荐
相关产品推荐

