3

ページごとに多くの行を表示する可能性のあるデータグリッドがあります。1ページに25行が表示されているとしましょう。ただし、グリッドの表示可能領域は10行のみです。つまり、グリッド全体で400ピクセルしかなく、各行は40ピクセルです。したがって、グリッド上にスクロールバーがあります。

グリッド内の1つの行を削除すると、グリッドは自動的にグリッド内の最初の行に移動します。下をスクロールして最後の行を削除すると、もう一度1行目に移動します。

私はこれに対抗するいくつかの方法を試みましたが、私が望むように機能する解決策を見つけることができません。

scrollIntoView()メソッドを使用して、削除された行の直前または直後の行をビューにスクロールしてみました。

削除する前にどの行が表示範囲にあったかを判断する方法を見つけようとしましたが、getVisibleRange()メソッドは実際に表示される範囲ではなく、ページ範囲に関連しています。

私はこれをウェブで検索しましたが、この問題を抱えているのは私だけのようです。私は何が欠けていますか?

4

2 に答える 2

2

私は同じ問題を抱えていました.dataGridにkeyboardSelectionPolicy = "BOUND_TO_SELECTION"がある場合にバグが発生することがわかりました

于 2014-05-03T21:02:02.117 に答える
0

ListDataProviderを使用して DataGrid のデータを管理する場合、項目の削除/追加時に DataGrid はスクロールしません。

以下は、スクロールせずにグリッド行を削除する最小限の例です (すべてエントリ ポイント クラスに含まれています)。

DataGrid 行のクラス:



    private class Item{
        public String text;
        public int value;
        public Item(String text, int value){
            this.text = text;
            this.value = value;
        }
    }

DataGrid を埋める:

ここでは、プライベート変数 を使用しdataて、DataGrid のアイテムを保持します。メソッドを介してdataGridtoをアタッチする必要があることに注意してください。dataaddDataDisplay



    ListDataProvider data;
    public void onModuleLoad() {
        // build grid:
        DataGrid dataGrid = new DataGrid();
        BuildColumns(dataGrid);
        dataGrid.setWidth("300px");
        dataGrid.setHeight("300px");
        // add items:
        data = new ListDataProvider();
        for(int i = 1; i < 25; i++){
            data.getList().add(new Item("Item " + i, i));
        }
        data.addDataDisplay(dataGrid);
        // display:
        RootPanel.get().add(dataGrid);
    }

DataGrid の構築:

このプライベート メソッドは、DataGrid の列を構築するために使用されます。delColボタン列のクリック イベントをリッスンするために使用されるの FieldUpdater 内で、からそれぞれの項目を削除し、DataGrid 表示を更新するためdataに呼び出します。data.refresh()



    private void BuildColumns(DataGrid dataGrid){
       Column textCol = new Column(new SafeHtmlCell()) {
            @Override
            public SafeHtml getValue(Item object) {
                    SafeHtmlBuilder sb = new SafeHtmlBuilder();
                sb.appendEscaped(object.text);
                    return sb.toSafeHtml();
            }
        };
        dataGrid.addColumn(textCol);
        dataGrid.setColumnWidth(textCol, 75, Unit.PCT);

        Column deleteCol = new Column(new ButtonCell()) {
            @Override
            public String getValue(Item object) {
                return "Delete " + object.value;
            }
        };
        deleteCol.setFieldUpdater(new FieldUpdater() {

            @Override
            public void update(int index, Item object, String value) {
                data.getList().remove(index);
                data.refresh();
            }
        });
        dataGrid.addColumn(deleteCol);
    }

このコードを新しい GWT プロジェクトに入れ、テストしました。行を削除するとき、DataGrid はスクロールしません。

于 2013-05-10T23:02:55.437 に答える