7

プロジェクトでGWT 2.4 の新しいDataGridを使用しています。ページサイズを 50 に設定して DataGrid を構成しました。
利用可能な画面はすべての項目を表示するには十分な大きさではないため、垂直スクロールバーが表示されます (実際には、これが最初に DataGrid を使用する主な目的です)。項目を選択できるようにするために
SingleSelectionModelを DataGrid にアタッチしました。
これはこれまでのところうまくいきます。

ただし、ユーザーが操作できる別のウィジェットもあります。そのユーザー アクションに基づいて、DataGridのアイテムを選択する必要があります。
選択したアイテムが表示可能な画面領域にない場合があり、ユーザーはそれを表示するために DataGrid を下にスクロールする必要があります。
選択したアイテムが表示されるように、自動または手動で下にスクロールする方法はありますか? DataGrid のJavaDoc
を調べたところ、それを行うための適切なメソッドや関数が見つかりませんでした。

4

6 に答える 6

9

これが機能するかどうかはわかりませんが、選択対象の行要素を取得して、scrollIntoViewメソッドを使用することはできます。

サンプルコード:

dataGrid.getRowElement(INDEX_OF_SELECTED_ITEM).scrollIntoView();
于 2011-09-28T19:32:34.127 に答える
6

上記の答えは非常にうまく機能しますが、グリッドがウィンドウよりも広く、水平スクロール バーがある場合は、右端までスクロールするのでかなり面倒です。選択した行の最初のセルを取得し、それをスクロールして表示することで、下にスクロールして左にスクロールしたままにすることができました。

dataGrid.getRowElement(dataGrid.getVisibleItems().indexOf(object)).getCells().getItem(0).scrollIntoView();
于 2012-02-17T21:11:57.943 に答える
2

試す時間はありませんが、DataGrid は HasRows インターフェイスを実装しており、HasRows には setVisibleRange というメソッドがあります。注目したい項目の行番号を割り出し、その番号 n から n+50 までの表示範囲を設定するだけです。そうすれば、DataGrid がリセットされ、そのアイテムが一番上に配置されます (または、DataGrid をサポートするリストの最後の 50 要素にある場合は一番上近くに配置されます)。DataGrid を再描画することを忘れないでください。

これはもう見ましたか?もしそうなら、私はそれがうまくいかなかったことに驚いています。

ああ、これは 1 つのウィジェットが別のウィジェットと対話しているため、ユーザーがその 2 番目のウィジェットを操作して項目を「選択」すると、メッセージが EventBus で発火し、そのメッセージは、私が説明した行に沿って DataGrid を修正します。この配線は自分でやる必要があると思います。

于 2011-09-28T16:00:25.807 に答える
1

上記を実行すると、範囲外の例外が発生しました。

DataGrid で ScrollPanel を取得して解決し、ScrollPanel で .scrollToTop() などを使用しました。ただし、DataGrid の ScrollPanel にアクセスするには、次のコメントを使用する必要がありました: http://code.google.com/p/google-web-toolkit/issues/detail?id=6865

于 2013-08-22T14:26:25.780 に答える
1

私の解決策、少し良い:

dataGrid.getRow(model).scrollIntoView();
于 2012-11-23T12:54:16.553 に答える
0

Kem が指摘したように、scrollIntoView の後の "scrollToRight" 効果が厄介です。私の後、通常、テーブルの最初の列がより意味があるため、Kemのソリューションはベースのものよりも優れた動作を提供します。スクロールを適用してからスクロールする前に、左側の最初の表示列を計算することで、表示したい行の最初の列まで水平にスクロールする彼のアプローチを少し改善しました。

最後の注意:列絶対左は「51」に対してテストされます。これは、ブラウザーの開発者ツールで JS 値を調べて「実験的に」見つけた値です。テーブルのスタイルに依存すると思います。変更/計算する必要がある場合があります。

コードの下:

public void scrollIntoView(T next) {
        int index = datagrid.getVisibleItems().indexOf(next);
        NodeList<TableCellElement> cells = datagrid.getRowElement(index).getCells();
        int firstVisibleIndex = -1;
        for(int i=0; i<cells.getLength() && firstVisibleIndex<0;i++)
            if(UIObject.isVisible(cells.getItem(i)) && (cells.getItem(i).getAbsoluteLeft() > 51) && (cells.getItem(i).getAbsoluteTop() > 0))
                firstVisibleIndex = i;

        cells.getItem(firstVisibleIndex>=0? firstVisibleIndex : 0).scrollIntoView();
}
于 2016-02-12T12:46:25.263 に答える