2017-06-12 89 views
0

有沒有簡單的方法來選擇Grid中顯示的第一行?我有物品清單並使用DataProvider.ofCollection(items)數據提供者。僅僅選擇我的支持列表的第一項是不夠的,因爲我將Grid排序爲一列,其可能與原始列表中的順序不同。任何想法?Vaadin 8格選第一行

我可以使用DataProvider.fetch方法,但感覺太複雜了。有沒有內置的方式?

+1

據我所見,通過簡單的方法是不可能的,例如'selectByIndex(0)'。我嘗試通過切換到多選模式來選擇所有項目,選擇並使用第一項,但不幸的是,您所獲得的一組選定項目中的順序與UI中的順序不同,所以這也是一個蕭條。儘管如此,如果您從數據庫獲取數據並將其作爲查詢結果進行排序,則可以使用第一項。否則,你可以嘗試打開[與Vaadin團隊問題](https://github.com/vaadin/framework/issues)。 – Morfic

回答

1

你可以做的是獲得當前的排序列ID和排序方向,然後與你的數據,排序並找到下一個對象選擇。

對我來說,我有與TreeGrid(擴展網格)相同的問題,所以這將是類似的,減去TreeData/RootItems部分。另外,我只對「名稱」進行排序。

<!-- language: lang-java -->  
List<GridSortOrder<MyPojo>> order = grid.getSortOrder(); 
Column<MyPojo, ?> col = order.get(0).getSorted(); 
SortDirection dir = order.get(0).getDirection(); 
String colId = col.getId(); 

if(colId.equals("name")) { 
    Optional<MyPojo> first; 
    if(dir.equals(SortDirection.ASCENDING)) { 
     first = grid.getTreeData().getRootItems().stream() 
            .sorted(Comparator.comparing(MyPojo::getName)).findFirst(); 
    }else { 
     first = grid.getTreeData().getRootItems().stream() 
           .sorted(Comparator.comparing(MyPojo::getName).reversed()).findFirst(); 
    } 
    if(first.isPresent()) 
     grid.select(first.get()); 
} 
+0

是的,目前沒有其他更簡單的解決方案。 –