2017-06-12 21 views
0

Gridに示されている最初の行を選択する簡単な方法はありますか?私はアイテムのリストを持っており、DataProvider.ofCollection(items)データプロバイダを使用しています。 Gridを元のリストとは異なる順序で並べ替えることができるので、私のバッキングリストの最初の項目を選択するだけでは不十分です。何か案が?Vaadin 8グリッド選択の最初の行

私はDataProvider.fetchメソッドを使用できますが、複雑すぎると感じています。組み込みの方法はありませんか?

+1

私が見た限りでは、簡単な手段ではできません。たとえば 'selectByIndex(0)'です。私はマルチセレクトモードに切り替えて、すべてのアイテムを選択し、選択を取得し、最初のアイテムを使用することで回避しようとしましたが、残念ながら選択したアイテムのセット内の順序はUIと同じではありません、それはまたバストです。それにもかかわらず、DBからデータを取得してクエリの結果としてソートされた場合は、最初の項目を使用できます。それ以外の場合は、[Vaadinチームの問題](https://github.com/vaadin/framework/issues)を開くことができます。 – Morfic

答えて

1

あなたができることは、現在の並べ替えの列IDとSortDirectionを取得し、データで並べ替えて次に選択するオブジェクトを見つけることです。

私にとっては、TreeGrid(Gridを拡張)と同じ問題があったので、これは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

はい、現時点で他の簡単な解決法はありません。 –

関連する問題